gpt4 book ai didi

java - Node.JS 和 Java PUB/SUB

转载 作者:行者123 更新时间:2023-11-30 06:37:53 25 4
gpt4 key购买 nike

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

我的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 在 Docker 中运行,端口 5556 暴露。
我已成功从 java 服务器发送消息。但我的 node.js 服务器没有收到任何消息。

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

最佳答案

是的,有一个问题:

根据 ZeroMQ 协议(protocol)规范中的定义,SUB-正式可扩展通信模式原型(prototype)在实例化时具有一个空的订阅列表。

SUB端订阅为空的原因是:

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

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

关于java - Node.JS 和 Java PUB/SUB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44905389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com