@dashersw/axon

中文文档
2.0.5发布于 2017/06/03MIT近 30 天下载 6472

在纯js中执行高端消息套接字模式( S)

中文使用文档
文档目录18 节
  1. 安装
  2. 特征
  3. 活动
  4. 模式
  5. 混合参数类型
  6. 推/ 推
  7. Pub / 子系统
  8. 立克/共和国
  9. PubEmiter / 子编辑器
  10. 套接字选项
  11. 绑定/ 连接
  12. 议定书
  13. 业绩
  14. 何等为用?
  15. 正在测试
  16. 作者数
  17. 链接
  18. 许可证

斧头

Axon 是一个面向消息的 socket 库,用于节点.js 由 0mq 大量灵感所激发. 轻而易举 您可能感兴趣的 UDP 选项 点。 。 。 .

Build Status

安装

$ npm install axon

特征

  • 面向消息
  • 自动重联
  • 轻重量电线协议
  • 混合类型参数(字符串、对象、缓冲等)
  • unix 域套接字支持
  • 快 (~800 mb/s~50万个消息/s)

活动

  • close 服务器或连接关闭时
  • error 未处理的套接字出错时 (err)
  • ignored error 当出现轴控套接字错误时, 会被忽略
  • socket error (err) 为伐木目的排放,不论处理情况如何
  • reconnect attempt 当尝试重新连接时
  • connect 当连接到对等点时, 或接受对等点连接
  • disconnect 当被接受的对等断开时
  • bind 当服务器绑定时
  • drop (msg) 由于HWM而丢弃信件时
  • flush 在连接上冲出信件时排入队列( msgs)

模式

  • 推动/ 拖动
  • 酒馆/子
  • req / 代表数
  • 站点/子站点

混合参数类型

后卫 节点-端口消息 您可以传递字符串、对象和缓冲作为参数.

push.send('image', { w: 100, h: 200 }, imageBuffer);
pull.on('message', function(type, size, img){});

推/ 推

PushSockets 以圆边方式分发信件 :

var axon = require('axon');
var sock = axon.socket('push');

sock.bind(3000);
console.log('push server started');

setInterval(function(){
  sock.send('hello');
}, 150);

接收者 PushSocket 信件 :

var axon = require('axon');
var sock = axon.socket('pull');

sock.connect(3000);

sock.on('message', function(msg){
  console.log(msg.toString());
});

两者 PushSockets 和 PullSocket可能的话 .bind() 或者说 .connect()在 配置后, 推出套接字绑定并拉“ 工人” 连接 接受工作:

push bind

这个配置显示反向, 工人连接到一个"沉" 推动成果:

pull bind

Pub / 子系统

PubSockets 不排队向所有订阅者发送消息。 这个 相对于 PushSocket,交付 消息会在断开时排队,并在下次连接时再次发送.

var axon = require('axon');
var sock = axon.socket('pub');

sock.bind(3000);
console.log('pub server started');

setInterval(function(){
  sock.send('hello');
}, 500);

SubSocket 仅接收任何来自 PubSocket数字 :

var axon = require('axon');
var sock = axon.socket('sub');

sock.connect(3000);

sock.on('message', function(msg){
  console.log(msg.toString());
});

SubSockets 可选择 .subscribe() 改为一个或多个“专题”(第一个多段值), 使用字符串模式或正则表达式:

var axon = require('axon');
var sock = axon.socket('sub');

sock.connect(3000);
sock.subscribe('user:login');
sock.subscribe('upload:*:progress');

sock.on('message', function(topic, msg){

});

立克/共和国

ReqSocket 类似于一个 PushSocket 在其中,它环绕边框消息 连接 RepSockets, 但其不同之处在于,来文是: 双向, 每 req.send() 必须 提供被引用的召回 当 RepSocket 答复.

var axon = require('axon');
var sock = axon.socket('req');

sock.bind(3000);

sock.send(img, function(res){

});

RepSocket收到一个 reply 用于响应请求的回调, 您可能有几个这样的节点.

var axon = require('axon');
var sock = axon.socket('rep');

sock.connect(3000);

sock.on('message', function(img, reply){
  // resize the image
  reply(img);
});

和其他套接字一样,您可能提供多个参数或一系列参数, 接着是回电 例如这里我们提供了任务名称“ 更改大小 ” 为单个套接字上的多个任务提供便利:

var axon = require('axon');
var sock = axon.socket('req');

sock.bind(3000);

sock.send('resize', img, function(res){

});

回应"调整"任务:

var axon = require('axon');
var sock = axon.socket('rep');

sock.connect(3000);

sock.on('message', function(task, img, reply){
  switch (task) {
    case 'resize':
      // resize the image
      reply(img);
      break;
  }
});

PubEmiter / 子编辑器

PubEmitter 财务报告和审定财务报表 SubEmitter 高级 Pub 编号 : Sub 套接字,用"json"的解码器来表现 很像节点的 EventEmitter当 a SubEmitter是因为 .on() 方法被引用,事件名称是 .subscribe()送给你 每个通配符( E)*) 或 regexp 抓取组与正则消息参数一起被传递到调回.

应用js:

var axon = require('axon');
var sock = axon.socket('pub-emitter');

sock.connect(3000);

setInterval(function(){
  sock.emit('login', { name: 'tobi' });
}, 500);

logger.js (英语):

var axon = require('axon');
var sock = axon.socket('sub-emitter');

sock.bind(3000);

sock.on('user:login', function(user){
  console.log('%s signed in', user.name);
});

sock.on('user:*', function(action, user){
  console.log('%s %s', user.name, action);
});

sock.on('*', function(event){
  console.log(arguments);
});

套接字选项

每个套接字都有相关选项,可以通过 get/set。 。 。 .

  • identity - 指定识别它的插座的"名字".
  • retry timeout - 连接重试超时(以毫秒计) [100]
  • retry max timeout - 重试超时长度的上限,以毫秒为单位 [5000]
  • hwm - 排队的高水分门槛[无穷]

绑定/ 连接

除了通过一个在默认情况下约束 INADDR ANY 的端口外, 您 也可以通过 .bind(port, host),另一个选项 是指定 url 与 zmq 一样 tcp://<hostname>:<portno>,因此 以下内容相当于:

sock.bind(3000)
sock.bind(3000, '0.0.0.0')
sock.bind('tcp://0.0.0.0:3000')

sock.connect(3000)
sock.connect(3000, '0.0.0.0')
sock.connect('tcp://0.0.0.0:3000')

您也可以使用 Unix 域名套接字 :

sock.bind('unix:///some/path')
sock.connect('unix:///some/path')

议定书

Axon 2.x使用极其简单的 AMP 计划 协议在电线上发送消息。 解码器已不再像Axon 1.x那样需要.

业绩

根据10条信息,我的Macbook Pro的初步基准 作为现实生产应用的每克 更无此相. “更好的”数字可能随着批量的分解而取消 和更大的信息/tick计数,但这不现实.

64 字节消息 :


      min: 47,169 ops/s
     mean: 465,127 ops/s
   median: 500,000 ops/s
    total: 2,325,636 ops in 5s
  through: 28.39 mb/s

1k 消息 :


      min: 48,076 ops/s
     mean: 120,253 ops/s
   median: 121,951 ops/s
    total: 601,386 ops in 5.001s
  through: 117.43 mb/s

8千个消息 :


      min: 36,496 ops/s
     mean: 53,194 ops/s
   median: 50,505 ops/s
    total: 266,506 ops in 5.01s
  through: 405.84 mb/s

32k消息 :


      min: 12,077 ops/s
     mean: 14,792 ops/s
   median: 16,233 ops/s
    total: 74,186 ops in 5.015s
  through: 462.28 mb/s

何等为用?

Axon不是用来对抗零克或提供特征等同的, 但当你不需要疯子的时候 提供一个很好的解决方案 0mq 提供的纳秒潜伏或语言互通性 由于斧头不依赖第三方编译的图书馆.

正在测试

$ npm install
$ make test

作者数

许可证

麻省理工学院

版本与发布记录

@dashersw/axon 共发布 3 个版本,首次发布于 2016/07/12;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.0.5latest2017/06/039 年前
2.0.42017/05/289 年前
2.0.32016/07/1210 年前

关于 @dashersw/axon 的常见问题

@dashersw/axon 是什么?

在纯js中执行高端消息套接字模式( S)

如何安装 @dashersw/axon?

在项目目录运行 npm install @dashersw/axon,或使用 pnpm add / yarn add / bun add。

@dashersw/axon 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/dashersw__axon 是否存在。

@dashersw/axon 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 0.11.8。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dashersw/axon 可以商用吗?

@dashersw/axon 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dashersw/axon 的下载量有多少?

根据 npm 官方下载统计,@dashersw/axon 在 2026/10/12 – 2026/11/10 这 30 天内被下载 6,472 次,日均约 216 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dashersw/axon 还在维护吗?

最新版本 2.0.5 发布于 2017/06/03(9 年前);至今共发布 3 个版本,其中过去 12 个月发布了 0 个;首次发布于 2016/07/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。