2

我有两个.js文件 -pub.js用于发布和sub.js订阅。这些文件实际上是node-nanomsg GitHub 站点上显示的示例的“拆分”版本。pub.js写入和tcp://127.0.0.1:7789读取sub.js相同。我sub.js先开始,然后pub.js。虽然pub.js很快完成,但sub.js从未收到消息。

pub.js

var nano = require('nanomsg')
var pub = nano.socket('pub')
pub.bind('tcp://127.0.0.1:7789')
//
pub.send('Hello')
pub.close()

sub.js

var nano = require('nanomsg')
var sub = nano.socket('sub')
sub.connect('tcp://127.0.0.1:7789')
//
sub.on('data', function(buf) {
    console.log(String(buf))
    sub.close()
})

更新

如果pub.js写如下并sub.js首先启动,则通信通过。

var nano = require('nanomsg')
var pub = nano.socket('pub')
pub.bind('tcp://127.0.0.1:7789')
//
setTimeout(() => {
    pub.send('Hello')
},2000)
//pub.close()

但是,发布-订阅范式不需要发布者和订阅者相互了解。如何启用 pub-sub 系统nanomsg

4

1 回答 1

0

在绑定 tcp 套接字完成之前,发布者似乎关闭了通信。

该库不提供 and 的异步版本,bind并且在函数返回时connect似乎bind没有完全完成执行。添加超时只是解决此问题的一种方法。

请参阅他们的 Github 存储库上的讨论:重写绑定/连接并从测试中删除 setTimeouts
不幸的是,拉取请求已关闭,异步功能仍未实现。

如果您查看他们提供的示例,它们都依赖于超时,这意味着开发人员已经承认了问题。在我看来,这个库还没有准备好用于生产,因为它依赖于超时。

于 2018-11-20T12:51:29.650 回答