【问题标题】:Node.JS and Java PUB/SUBNode.JS 和 Java PUB/SUB
【发布时间】:2017-12-07 21:24:52
【问题描述】:

我正在尝试构建一个通信将由node.js 服务器完成的应用程序。该节点服务器将接收来自其他节点的消息。

我的node.js 代码是:

var zmq = require('zmq'),
    socket = zmq.socket('sub');

socket.bind('tcp://127.0.0.1:5556', function (err) {
    if (err) {
        console.log('Error: ', err);
        throw err;
    }

    socket.on('message', function (envelope, blank, data) {
        console.log(arguments);
    });

    socket.on('error', function (err) {
        console.log(arguments);
    });
});

在系统的另一部分,有一个java 服务器应该为这个服务器发送消息。 这是我的java 代码:

Context context = ZMQ.context(1);
Socket publisher = context.socket(ZMQ.PUB);
publisher.connect("tcp://127.0.0.1:5556");
for (int request_nbr = 0; request_nbr < 10; request_nbr++) {
    publisher.send("Hello");
}

目前,我的java 服务器在本地运行,而我的node.js 在暴露了端口 5556 的 docker 内运行。
我已成功从java 服务器发送消息。但是我的node.js 服务器没有收到任何消息。

我的 ZeroMQ 初始化有什么问题吗?

【问题讨论】:

  • 您可以在这里做一些简单的事情来对问题进行分类 - 例如。在 Docker 之外运行,创建 Java 订阅者,创建 Node 发布者......
  • 在 docker 外运行并不能解决我的问题

标签: java node.js sockets zeromq data-stream


【解决方案1】:

是的,有问题:

根据 ZeroMQ 协议规范中的定义,SUB-Formal Scalable Communication Pattern 原型在实例化时有一个空订阅列表。

空的SUB端订阅是原因:

您的 SUB 端确实必须订阅其他任何内容(至少是 "" - 是的 - 一个空字符串就足够了,可以开始接收任何和所有消息,或者可以设置一些特定于问题/上下文的字符串,作为 TOPIC-filter,其中每条消息都将开始测试是否存在至少一个这样的 TOPIC-s,并丢弃(不是.recv()-ed 或不提升为.on( 'message', ... ) 处理程序的手)。

无论如何,享受 ZeroMQ 的强大功能进行分布式计算!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-12
    • 2017-11-13
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多