node-nanomsg-订户未收到消息

时间:2018-11-20 10:03:33

标签: javascript node.js nanomsg

我有两个.js文件-pub.js用于发布,sub.js用于订阅。这些文件实际上是node-nanomsg GitHub site上显示的示例的“拆分”版本。 pub.js写入tcp://127.0.0.1:7789,而sub.js则从中读取。我首先开始sub.js,然后开始pub.jspub.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启用发布-订阅系统?

1 个答案:

答案 0 :(得分:0)

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

该库未提供bindconnect的异步版本,并且函数返回时,似乎bind尚未完全完成执行。添加超时只是解决此问题的方法。

在其Github存储库中查看此讨论:documentation
不幸的是,拉取请求已关闭,并且异步功能仍未实现。

如果您查看它们提供的rewrite bind/connect and remove setTimeouts from tests,它们都依赖于超时,这意味着开发人员已经意识到了问题。我认为该库尚未准备好用于生产,因为它依赖超时。