ZMQ pub/sub 订阅

5
我很难确定如何使用ZMQ订阅特定的“频道”,涉及其发布/订阅功能。以下是发布者代码:
var zmq = require('zmq');
var pub = zmq.socket('pub');

pub.bindSync('tcp://127.0.0.1:5555');

setInterval(function(){
    pub.send('pub msg');
},500);

这里是订阅者:

 var sub = zmq.socket('sub');
 sub.connect('tcp://127.0.0.1:5555');

 sub.subscribe('');  //herein lies the question

 sub.on('message',function(msg){
        console.log('Received msg:',msg);
 }

这段代码本身可以工作,但问题在于,如果我将sub.subscribe的参数更改为除了空字符串('')之外的任何值,订阅者将无法从发布者那里接收到任何消息。

我该如何正确地配置使用ZMQ的发布/订阅模式?


1
即使您执行 sub.subscribe('pub'),您也没有收到任何东西吗? - zeFrenchy
发布者和订阅者不在同一个文件或程序中... - Alexander Mills
那实际上并不相关。我的意思是,既然您的发布者发送以字符串“pub”开头的消息,订阅“pub”应该会在订阅方收到消息。所有订阅操作所做的就是在订阅方侧设置一个过滤器。 - zeFrenchy
1个回答

7
sub.subscribe('topic') 将过滤器添加到您的订阅者套接字中,以便您只接收以字符串topic开头的消息。您可以通过多次调用它来添加多个过滤器。sub.subscribe('') 删除任何现有过滤器,因此您的订阅者会收到发布者发送的所有消息。
在您的代码中使用sub.subscribe('pub')将产生订阅方面的消息。
在zeromq.node GitHub上的pub/sub示例是了解订阅工作原理的好地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接