@davedoesdev/dnode

中文文档
3.2.0发布于 2023/11/16MITCommonJS近 30 天下载 3549

自由样式 rpc

中文使用文档
文档目录13 节
  1. 听和连接
  2. 流线
  3. 浏览器中的 dnode
  4. var d = dnode(cons, opts- ) (中文(简体) )
  5. d. 连接(.)
  6. dnode. 连接(...)
  7. d. listen( ) (...)
  8. dnode. listen (...) (中文(简体) )
  9. d.on(远处), cb)
  10. d.on(“当地”、cb)
  11. d. on ('fail', cb) (英语)
  12. d.on('error', cb) (中文(简体) )
  13. d.on('end', cb) (中文(简体) )

节点

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

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

browser support

build status

dnode: freestyle rpc

实例

听和连接

服务器 :

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

客户端 :

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() 前一个例子中的呼吁只是 接通可读/可写流的方便方法. 以下是前一个例子,其中明确设置了溪流:

服务器 :

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);

客户端 :

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 实例只是可读/ 可写流, 您可以用 包括浏览器中的任何流媒体传输!

此示例使用由 鞋头上面只是薄薄的包装纸 袜子 提供倒置的网索.

首先鞭打服务器 :

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');

然后写一些浏览器代码 :

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);
});

安装此示例的依赖性, 然后编译浏览器代码 浏览器数字 :

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

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

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

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

看看这个 完整鞋样示例。 。 。 .

方法

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) (中文(简体) )

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

安装

与 无 ưμ㼯a

npm install dnode

协议

dnode 使用新线终止的 JSON 协议 dnode-protocol 计划中的文档。 。 。 .

其他语言的dnode

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

无耻的插头

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

版本与发布记录

@davedoesdev/dnode 共发布 10 个版本,首次发布于 2019/09/12;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.2.0latest2023/11/162 年前
3.1.02023/11/162 年前
3.0.02023/04/163 年前
2.0.22022/06/034 年前
2.0.12021/12/074 年前
2.0.02021/12/054 年前

关于 @davedoesdev/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 和提交记录判断。