# @dashersw/axon 中文文档

规范地址：https://npmcn.com/package/%40dashersw/axon/

版本：2\.0\.5
npm 元数据更新时间：2022-06-12T16:52:44.827Z
中文译文更新时间：2026-11-11T12:31:15.818Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dashersw/axon
原文对照：https://npmcn.com/package/%40dashersw/axon/?lang=original
项目主页：https://github.com/visionmedia/axon#readme
源码仓库：https://github.com/visionmedia/axon

## 关键信息（来自 npm 元数据）

- TypeScript 类型：未声明
- Node.js 要求：\>= 0\.11\.8
- 运行依赖：5 个
- 首次发布：2016-07-11T22:59:58.028Z
- 最新版本发布：2017-06-02T22:58:44.143Z
- 近 30 天下载量：6472（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：3（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install @dashersw/axon
```

也可以使用：`pnpm add @dashersw/axon`、`yarn add @dashersw/axon`、`bun add @dashersw/axon`

## README

# 斧头

Axon 是一个面向消息的 socket 库,用于节点.js 由 0mq 大量灵感所激发. 轻而易举 您可能感兴趣的 UDP 选项 [点](https://github.com/tj/punt)。 。 。 .

[![Build Status](https://travis-ci.org/tj/axon.png)](https://travis-ci.org/tj/axon)

## 安装

```
$ 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 / 代表数
-   站点/子站点

## 混合参数类型

后卫 [节点-端口消息](https://github.com/tj/node-amp-message) 您可以传递字符串、对象和缓冲作为参数.

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

## 推/ 推

`PushSocket`s 以圆边方式分发信件 :

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

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

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

接收者 `PushSocket` 信件 :

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

sock.connect(3000);

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

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

![push bind](http://f.cl.ly/items/473u3m1a0k1i0J0I3s04/ss-push.png)

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

![pull bind](http://f.cl.ly/items/3Y0j2v153Q0l1r373i0H/ss-pull.png)

## Pub / 子系统

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

```js
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`数字 :

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

sock.connect(3000);

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

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

```js
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` 在其中,它环绕边框消息 连接 `RepSocket`s, 但其不同之处在于,来文是: 双向, 每 `req.send()` _必须_ 提供被引用的召回 当 `RepSocket` 答复.

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

sock.bind(3000);

sock.send(img, function(res){

});
```

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

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

sock.connect(3000);

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

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

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

sock.bind(3000);

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

});
```

回应"调整"任务:

```js
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:

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

sock.connect(3000);

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

logger.js (英语):

```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 计划](https://github.com/tj/node-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
```

## 作者数

-   [页:1](http://github.com/tj)
-   [格汉森](https://github.com/gjohnson)

## 链接

-   [屏幕广播](https://vimeo.com/45818408)
-   [阿克逊 RPC](https://github.com/tj/axon-rpc)

## 许可证

麻省理工学院

## 常见问题

### @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 和提交记录判断。

