Node.JS和Java PUB / SUB

时间:2017-07-04 11:57:07

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

我正在尝试构建一个应用程序,通信将由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初始化有什么问题吗?

1 个答案:

答案 0 :(得分:1)

是的,有一个问题:

正如ZeroMQ协议规范中所定义的, SUB - 正常可扩展通信模式原型在其实例化时具有空订阅列表。

空SUB侧订阅是原因:

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

无论如何,享受分布式计算的ZeroMQ功能