socketx 用于在 Node 中建立 socket 连接

发布于 2021-11-25 22:48:57 字数 4671 浏览 1356 评论 0

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:portpath 长连接的缓存个数

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),返回 Promisesocket 对象
  • connectTimeout: 可选,socket连接超时毫秒数,默认为3000ms,如果值为非正数,表示不设置超时
  • idleTimeout:可选,设置socket的空闲超时毫秒数,socket在idleTimeout时间内没有传输数据将自动销毁,默认为0,不设置idleTimeout时间,如果值为非正数,表示不设置超时
  • path: 同socket

其中 host:portpath 至少要存在一个。

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),返回 Promisesocket 对象
  • connectTimeout: 可选,socket 连接超时毫秒数,默认为 3000ms,如果值为非正数,表示不设置超时
  • idleTimeout:可选,设置socket的空闲超时毫秒数,socket 在 idleTimeout 时间内没有传输数据将自动销毁,默认为 0,不设置 idleTimeout 时间,如果值为非正数,表示不设置超时
  • path: 同socket

其中 host:portpath 至少要存在一个,如果相同的 host:port 要缓存池里面建立多条连接可以采用设置 name 的方式区分,因为缓存的key是通过按优先顺序 host:port[:name]path[:name] 生成,其中 name 默认为空。

项目地址:https://github.com/avwo/socketx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

娇女薄笑

文章 0 评论 0

biaggi

文章 0 评论 0

xiaolangfanhua

文章 0 评论 0

rivulet

文章 0 评论 0

我三岁

文章 0 评论 0

薆情海

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文