我有两个.js
文件-pub.js
用于发布,sub.js
用于订阅。这些文件实际上是node-nanomsg GitHub site上显示的示例的“拆分”版本。 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
启用发布-订阅系统?
答案 0 :(得分:0)
似乎在绑定tcp套接字完成之前,通讯已被发布者关闭。
该库未提供bind
和connect
的异步版本,并且函数返回时,似乎bind
尚未完全完成执行。添加超时只是解决此问题的方法。
在其Github存储库中查看此讨论:documentation
不幸的是,拉取请求已关闭,并且异步功能仍未实现。
如果您查看它们提供的rewrite bind/connect and remove setTimeouts from tests,它们都依赖于超时,这意味着开发人员已经意识到了问题。我认为该库尚未准备好用于生产,因为它依赖超时。