代码之家  ›  专栏  ›  技术社区  ›  cogitoergosum

节点nanomsg-订阅服务器不接收消息

  •  2
  • cogitoergosum  · 技术社区  · 7 年前

    我有两个 .js 文件- pub.js 供出版和 sub.js 订阅。这些文件实际上是示例的“拆分”版本,如 node-nanomsg GitHub site . 这个 通用汽车公司 写入 tcp://127.0.0.1:7789 亚JS 读取相同的内容。我启动了 亚JS 先是后是 通用汽车公司 . 而 通用汽车公司 很快就完成了, 亚JS 从不接收消息。

    通用汽车公司

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

    亚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()
    })
    

    更新

    如果 通用汽车公司 写如下: 亚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子范式并不要求发布者和订阅者相互了解。如何启用pub子系统 nanomsg ?

    1 回复  |  直到 7 年前
        1
  •  0
  •   mihai    7 年前

    似乎在绑定TCP套接字完成之前,发布服务器关闭了通信。

    库不提供的异步版本 bind connect 似乎 绑定 函数返回时没有完全完成执行。添加超时只是解决这个问题的一个方法。

    请参见有关其Github存储库的讨论: rewrite bind/connect and remove setTimeouts from tests
    不幸的是,拉请求被关闭,异步功能仍然没有实现。

    如果你看 examples 它们提供,它们都依赖于超时,这意味着问题得到了开发人员的认可。在我看来,这个图书馆还不能投入生产使用,因为它依赖于超时。