node-nanomsg - 订阅者不接收消息

node-nanomsg - subscriber does not receive messages

我有两个 .js 文件 - pub.js 用于发布,sub.js 用于订阅。这些文件实际上是 node-nanomsg GitHub site 上显示的示例的 'split' 版本。 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()

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

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

库不提供 bindconnect 的异步版本,似乎 bind 在函数 returns 时没有完全执行完。添加超时只是解决此问题的方法。

在他们的 Github 存储库中查看此讨论:rewrite bind/connect and remove setTimeouts from tests
不幸的是,拉取请求已关闭,异步功能仍未实现。

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