# @davedoesdev/dnode 中文文档

规范地址：https://npmcn.com/package/%40davedoesdev/dnode/

版本：3\.2\.0
npm 元数据更新时间：2023-11-15T21:35:14.490Z
中文译文更新时间：2026-11-11T20:41:38.852Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：564 kB，47 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=16
- 运行依赖：2 个
- 首次发布：2019-09-11T21:06:32.413Z
- 最新版本发布：2023-11-15T21:35:14.282Z
- 近 30 天下载量：3549（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 0 个）

## 中文简介

自由样式 rpc

## 安装

```sh
npm install @davedoesdev/dnode
```

也可以使用：`pnpm add @davedoesdev/dnode`、`yarn add @davedoesdev/dnode`、`bun add @davedoesdev/dnode`

## README

# 节点

dnode 是一个用于节点的同步的 rpc 系统.js 允许您 调用远程函数.

您可以将调用调用通过远程函数,远程端可以调用 使用它自己的召回功能等. 倒计时!

[![browser support](https://ci.testling.com/substack/dnode.png)](http://ci.testling.com/substack/dnode)

[![build status](https://github.com/davedoesdev/dxf/workflows/ci/badge.svg)](https://github.com/davedoesdev/dxf/actions)

![dnode: freestyle rpc](https://npmcn.com/package/%40davedoesdev/dnode/dnode.png)

# 实例

## 听和连接

服务器 :

```js
var dnode = require('dnode');
var server = dnode({
    transform : function (s, cb) {
        cb(s.replace(/[aeiou]{2,}/, 'oo').toUpperCase())
    }
});
server.listen(5004);
```

客户端 :

```js
var dnode = require('dnode');

var d = dnode.connect(5004);
d.on('remote', function (remote) {
    remote.transform('beep', function (s) {
        console.log('beep => ' + s);
        d.end();
    });
});
```

输出 :

```
$ node server.js &
[1] 27574
$ node client.js
beep => BOOP
```

## 流线

这个 `.connect()` 财务报告和审定财务报表 `.listen()` 前一个例子中的呼吁只是 接通可读/可写流的方便方法. 以下是前一个例子,其中明确设置了溪流:

服务器 :

```js
var dnode = require('dnode');
var net = require('net');

var server = net.createServer(function (c) {
    var d = dnode({
        transform : function (s, cb) {
            cb(s.replace(/[aeiou]{2,}/, 'oo').toUpperCase())
        }
    });
    c.pipe(d).pipe(c);
});

server.listen(5004);
```

客户端 :

```js
var dnode = require('dnode');
var net = require('net');

var d = dnode();
d.on('remote', function (remote) {
    remote.transform('beep', function (s) {
        console.log('beep => ' + s);
        d.end();
    });
});

var c = net.connect(5004);
c.pipe(d).pipe(c);
```

输出 :

```
$ node server.js &
[1] 27586
$ node client.js 
beep => BOOP
```

## 浏览器中的 dnode

由于 dnode 实例只是可读/ 可写流, 您可以用 包括浏览器中的任何流媒体传输!

此示例使用由 [鞋头](https://github.com/substack/shoe)上面只是薄薄的包装纸 [袜子](http://sockjs.org/) 提供倒置的网索.

首先鞭打服务器 :

```js
var http = require('http');
var shoe = require('shoe');
var ecstatic = require('ecstatic')(__dirname + '/static');
var dnode = require('dnode');

var server = http.createServer(ecstatic);
server.listen(9999);

var sock = shoe(function (stream) {
    var d = dnode({
        transform : function (s, cb) {
            var res = s.replace(/[aeiou]{2,}/, 'oo').toUpperCase();
            cb(res);
        }
    });
    d.pipe(stream).pipe(d);
});
sock.install(server, '/dnode');
```

然后写一些浏览器代码 :

```js
var domready = require('domready');
var shoe = require('shoe');
var dnode = require('dnode');

domready(function () {
    var result = document.getElementById('result');
    var stream = shoe('/dnode');
    
    var d = dnode();
    d.on('remote', function (remote) {
        remote.transform('beep', function (s) {
            result.textContent = 'beep => ' + s;
        });
    });
    d.pipe(stream).pipe(d);
});
```

安装此示例的依赖性, 然后编译浏览器代码 [浏览器](https://github.com/substack/node-browserify)数字 :

```
$ npm install dnode shoe domready ecstatic
$ npm install -g browserify
$ browserify client.js -o static/bundle.js
```

现在将脚本标记放入静态/ 索引中 。 html: 请检查url=值 (帮助)

```html
<script src="/bundle.js"></script>
<div id="result"></div>
```

并导航至http://localhost:9999. 你应该看看 `beep => BOOP` 在页面上!

看看这个 [完整鞋样示例](https://npmcn.com/package/%40davedoesdev/dnode/example/shoe)。 。 。 .

# 方法

```js
var dnode = require('dnode')
```

## var d = dnode(cons, opts- ) (中文(简体) )

创建新的可读/可写 dnode 流对象 `d`。 。 。 . 所有常用的流法都可以使用:管(),写(),出().

若为 `cons` 是一个函数,将称为 `new cons(remote, d)` 创建新的 实例对象。 否则,其价值将被直接使用。 何时 `cons` 实值 作为函数 `remote` ref 将是一个空的无人口对象 .

默认情况下, dnode 使用微缩图来收集未使用的回调 自动。 这种行为可以防止长期连接中的内存出漏.

通过设置可以关闭弱相 `opts.weak = false`。 。 。 .

## d. 连接(.)

这种方法是设置管道的快捷键 `d` 和一个新的 `net.connect()` 流线.

所提供的主机、端口和回调参数将根据其 类型.

如果你通过回调 作为争论, 它会增加 作为听众 `'remote'` 活动.

返回 `d` 对象.

## dnode. 连接(...)

快捷键以创建没有构造器的连接 .

## d. listen( ) (...)

这种方法是设置 `net.createServer()` 和管道 网络流到和从新的dnode流.

主机、端口和召回参数将从类型中推断出来 参数.

返回将同时发射的网络服务器对象 `'local'` 财务报告和审定财务报表 `'remote'` 事件 从深处取出.

## dnode. listen (...) (中文(简体) )

快捷键创建一个没有构造器的收听器 .

# 事件

## d.on(远处), cb)

这个事件与 `cb(remote, d)` 当连接的远程侧面 已经构建了它的实例.

## d.on(“当地”、cb)

此事件在本地创建实例后即发生 但是在它被发送到远程端之前,你可以修改参考对象.

这个事件与 `cb(ref, d)` 地点 `ref` 是本地实例对象.

## d. on ('fail', cb) (英语)

当远程端导致协议层出错时,此事件会起火.

这些是非致命的,也许可以忽略 但你也可以终止 连接这里.

## d.on('error', cb) (中文(简体) )

当本地代码导致其回调错误时,此事件会起火. 并非所有错误都可以在这里被捕获,因为有些可能处于同源函数中.

## d.on('end', cb) (中文(简体) )

此事件在输入流完成时会起火.

# 安装

与 [无](http://npmjs.org/) ưμ㼯a

```
npm install dnode
```

# 协议

dnode 使用新线终止的 JSON 协议 [dnode-protocol 计划中的文档](https://github.com/substack/dnode-protocol/blob/master/doc/protocol.markdown#the-protocol)。 。 。 .

# 其他语言的dnode

这些库也执行 dnode 协议, 这样您就可以调用 RPC 在以不同语言编写的脚本之间.

-   [节点- perl](http://github.com/substack/dnode-perl)
-   [节点路由](http://github.com/substack/dnode-ruby)
-   [dnode-php (日语)](https://github.com/bergie/dnode-php)
-   [dnode-php-sync-客户端](https://github.com/erasys/dnode-php-sync-client)
-   [诺德-贾瓦](https://github.com/aslakhellesoy/dnode-java)

# 无耻的插头

想确定你那疯狂的 Javascript-重磅的应用 还在其它地方工作 浏览器? 给 [浏览器](http://browserling.com/) 一个旋转! 在您的浏览器中浏览器 。 由dnode提供动力.

## 常见问题

### @davedoesdev/dnode 是什么？

自由样式 rpc

### 如何安装 @davedoesdev/dnode？

在项目目录运行 npm install @davedoesdev/dnode，或使用 pnpm add / yarn add / bun add。

### @davedoesdev/dnode 支持 TypeScript 吗？

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

### @davedoesdev/dnode 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @davedoesdev/dnode 需要什么版本的 Node\.js？

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

### @davedoesdev/dnode 可以商用吗？

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

### @davedoesdev/dnode 的下载量有多少？

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

### @davedoesdev/dnode 还在维护吗？

最新版本 3\.2\.0 发布于 2023/11/16（2 年前）；至今共发布 10 个版本，其中过去 12 个月发布了 0 个；首次发布于 2019/09/12。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

