【发布时间】: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