如果发布者在zeromq中失败,则订阅者不会抛出错误

时间:2013-10-22 06:41:51

标签: node.js sockets zeromq publish-subscribe

我在使用下面的zeromq在nodejs中编写发布者和订阅者是我的代码

  

publisher.js

var zmq = require('zmq')
var publisher = zmq.socket('pub')

publisher.bind('tcp://127.0.0.1:7000', function(err) {
if(err)
    console.log(err)
else
    console.log("Listening on 7000...")
})


setTimeout(function() {
    console.log('sent');

    publisher.send("hi")
}, 1000)

process.on('SIGINT', function() {
publisher.close()
console.log('\nClosed')
})
  

Subscriber.js

 var zmq = require('zmq')
 var subscriber = zmq.socket('sub')

 subscriber.on("message", function(reply) {
 console.log('Received message: ', reply.toString());
 })

 subscriber.connect("tcp://localhost:7000",function(err) {
 if (err) {
     console.log( 'Error binding socket' );
     return;
 }
 subscriber.close(); // This is fine! The socket is ready!
 })
 subscriber.subscribe("")

 process.on('SIGINT', function() {
 subscriber.close()
 console.log('\nClosed')
 })

当发布者关闭或订阅者关闭时,我试图通过写回来捕获错误。但在这两种情况下似乎没有捕获srror。我被困在这里不知道哪里出错。任何非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

ZeroMq在对等端断开连接时不会引发错误。连接和断开连接的物理方面是透明处理的,并且隐藏在应用程序之外。

如果对等方不可用,强制ZeroMq引发错误的一种方法是将ROUTERrouter mandatory选项设置为true。如果ROUTER尝试发送到实际不存在的对等方,ROUTER将引发异常。