gpt4 book ai didi

javascript - NodeJS ZeroMQ - 连接后生产者何时准备好发送消息?

转载 作者:行者123 更新时间:2023-12-03 08:23:02 26 4
gpt4 key购买 nike

我对 Zeromq 支持的模式进行了一些小研究。我想描述 PUB/SUB 模式的问题,但可能我在最近的项目中也在 PUSH/PULL 模式中发现了这个问题。我使用 NodeJS Zeromq 实现。

我准备了两个示例(server.js 和 client.js)。我发现每次重新启动服务器时,来自 server.js 的第一条消息都会丢失(消息每 1 秒发送一次)。 client.js 没有收到第一条消息。这可能是由于发送消息之前时间过短造成的。当我在一段时间(例如 1 秒)后开始发送消息时,一切正常。我认为 zmq 需要一些时间来初始化发布者和订阅者之间的连接。

我想知道生产者(服务器)何时准备好为订阅的客户端发送消息。如何获取这些信息?

我不明白为什么 client.js 连接并订阅消息没有得到它,因为服务器在重新启动后尚未准备好支持订阅。

也许它的设计就是这样的。

服务器.js:

var zmq = require('zmq');
console.log('server zmq: ' + zmq.version);

var publisher = zmq.socket('pub');
publisher.bindSync("tcp://*:5555");

var i = 0;
var msg = "get_status OK ";
function sendMsg () {
console.log(msg + i);
publisher.send(msg + i);
i++;
setTimeout(sendMsg, 1000);
}
sendMsg();

process.on('SIGINT', function() {
publisher.close();
process.exit();
});

客户端.js:

var zmq = require('zmq');
console.log('client zmq: ' + zmq.version);

var subscriber = zmq.socket('sub');
subscriber.subscribe("get_status");

subscriber.on('message', function(data) {
console.log(data.toString());
});
subscriber.connect("tcp://127.0.0.1:5555");

process.on('SIGINT', function() {
subscriber.close();
process.exit();
});

最佳答案

在 Node zmq lib 存储库中,您已声明 supported monitoring events 。订阅此内容将允许您监视您的连接,在本例中为 accept 事件。但不要忘记,您还必须在套接字 to activate monitoring 上调用 monitor() 函数。 .

你最终应该得到类似的结果:

var publisher = zmq.socket('pub');
publisher.on('accept', function(fd, ep) {
sendMsg();
});
publisher.monitor(100, 0);
publisher.bindSync("tcp://*:5555");

关于javascript - NodeJS ZeroMQ - 连接后生产者何时准备好发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33673883/

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