socketx 用于在 Node 中建立 socket 连接
socketx 用于在 Node 中建立 socket 连接,使用简单,且支持设置 http 代理及自定义建立连接的方式。
安装
npm i --save socketx
使用
服务器代码:
// server.js const net = require('net'); const noop = _ => _; const server = net.createServer((socket) => { socket.on('error', noop); socket.on('data', (data) => { socket.write(`response: ${data}`); }); }); server.listen(9999, () => { console.log(`server listening on ${server.address().port}.`); });
普通客户端代码:
const { connect } = require('socketx'); (async () => { const client = await connect({ host: '127.0.0.1', port: 9999, }); client.on('data', (data) => { console.log(`${data}`); }); client.on('error', (e) => console.error(e)); setInterval(() => { client.write('test'); }, 3000); })();
连接池代码:
连接池的缓存 key 是通过 connect(options)
里面参数 host:port[:name]
或 path[:name]
生成,其中 name
默认为空;可以通过name控制相同 host:port
或 path
长连接的缓存个数
const { Pool } = require('socketx'); const pool = new Pool(); (async () => { const client = await pool.connect({ host: '127.0.0.1', port: 9999, }); client.on('data', (data) => { console.log(`${data}`); }); client.on('error', (e) => console.error(e)); setInterval(() => { client.write('test'); }, 3000); })();
通过代理到whistle:
const { connect } = require('socketx'); (async () => { const proxy = { host: '127.0.0.1', port: 8899, }; const client = await connect({ host: '127.0.0.1', port: 9999, proxy, }); client.on('data', (data) => { console.log(`${data}`); }); client.on('error', (e) => console.error(e)); setInterval(() => { client.write('test'); }, 3000); })();
API
const { connect, Pool } = require('socketx');
connect(options)
options:
- host: 服务器的ip或域名
- port: 服务器的端口
- proxy: 设置http代理
- host: 代理服务器ip或域名
- port: 代理服务器端口
- headers: 自定义代理请求头
- createConnection(options): 自定义建立连接方式,options为connect(
options
),返回Promise
或socket
对象 - connectTimeout: 可选,socket连接超时毫秒数,默认为3000ms,如果值为非正数,表示不设置超时
- idleTimeout:可选,设置socket的空闲超时毫秒数,socket在idleTimeout时间内没有传输数据将自动销毁,默认为0,不设置idleTimeout时间,如果值为非正数,表示不设置超时
- path: 同socket
其中 host:port
、path
至少要存在一个。
new Pool(options)
根据 host:port:name
自动缓存连接,确保每个key至多只有一个连接。
options:
- proxy: 设置http代理,
pool.connect
里面的proxy
参数优先级高于该配置- host: 代理服务器ip或域名
- port: 代理服务器端口
- headers: 自定义代理请求头
- connectTimeout: 可选,设置连接池里面默认socket连接超时毫秒数,默认为3000ms,如果值为非正数,表示不设置超时,该设置可以通过
pool.connect(opts)
的opts.connectTimeout
修改 - idleTimeout:可选,设置连接池里面默认socket的空闲超时毫秒数,socket在idleTimeout时间内没有传输数据将自动销毁,默认为0,不设置idleTimeout时间,如果值为非正数,表示不设置超时,该设置可以通过
pool.connect(opts)
的opts.idleTimeout
修改 - createConnection: 可选,自定义建立连接方式,该设置可以通过
pool.connect(opts)
的opts.createConnection
修改
pool.connect(options)
options:
- host: 服务器的ip或域名
- port: 服务器的端口
- proxy: 设置http代理,优先级高于构造函数的
proxy
参数- host: 代理服务器ip或域名
- port: 代理服务器端口
- headers: 自定义代理请求头
- name: 可选,连接名称,主要用于协助设置缓存的key
- createConnection(options): 自定义建立连接方式,options 为 connect(
options
),返回Promise
或socket
对象 - connectTimeout: 可选,socket 连接超时毫秒数,默认为 3000ms,如果值为非正数,表示不设置超时
- idleTimeout:可选,设置socket的空闲超时毫秒数,socket 在 idleTimeout 时间内没有传输数据将自动销毁,默认为 0,不设置 idleTimeout 时间,如果值为非正数,表示不设置超时
- path: 同socket
其中 host:port
、path
至少要存在一个,如果相同的 host:port
要缓存池里面建立多条连接可以采用设置 name
的方式区分,因为缓存的key是通过按优先顺序 host:port[:name]
或 path[:name]
生成,其中 name
默认为空。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论