斧头
Axon 是一个面向消息的 socket 库,用于节点.js 由 0mq 大量灵感所激发. 轻而易举 您可能感兴趣的 UDP 选项 点。 。 。 .
安装
$ 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()在
配置后, 推出套接字绑定并拉“ 工人” 连接
接受工作:

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

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
作者数
链接
许可证
麻省理工学院
