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);
})();
const { connect, Pool } = require('socketx');
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
至少要存在一个。
根据 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
修改
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
默认为空。