【问题标题】:NodeJS ZeroMQ - When producer is ready to send message after connection?NodeJS ZeroMQ - 生产者何时准备好在连接后发送消息?
【发布时间】:2016-02-13 22:06:51
【问题描述】:

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

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

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

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

也许它是这样设计的。

server.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();
});

client.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();
});

【问题讨论】:

  • github repository 你可以看到描述套接字监控的部分。当套接字准备好工作时,它们会触发某些事件。你可以在你的应用程序中使用它来确定套接字是否准备好工作。
  • 感谢您的建议。我不确定监控是否适合正常使用,因为您必须启动监控,如果不使用则禁用。监控“接受”对我有用。

标签: javascript node.js zeromq publish-subscribe


【解决方案1】:

在 node zmq lib repo 中,您已经声明了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");

【讨论】:

  • 非常感谢。我用显示器做了一些研究。我听说过它,但我不确定它是否是好的模式。我用 monitor() 做了一些实验。它在每个问题上都不是很好,但它涵盖了我的两个主要问题。每个人都应该先对其进行测试。
猜你喜欢
  • 2018-09-25
  • 2012-04-25
  • 1970-01-01
  • 2015-03-19
  • 2021-01-09
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多