zmq的发布者订阅者模式未按预期工作

时间:2016-11-19 05:02:04

标签: node.js design-patterns publish-subscribe messages

我在nodejs中有pub / sub模式的简单示例程序,如下所示

publisher.js

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

pub.bind('tcp://127.0.0.1:6666');

console.log("Current 0MQ version is " + zmq.version);
var loop =0

pub.send(['t',loop++ + ' pub msg']);
pub.send(['t',loop++ + ' pub msg']);

subber.js

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

sub.subscribe('t');  //herein lies the question
console.log('Received msg:');
sub.on('message',function(topic, msg){
    console.log('Received msg:',msg.toString());
})

有一些意想不到的行为,我将从两天开始理解

1:我第一次运行subber.js然后 publisher.js我将按预期收到消息

2:如果我以相同的顺序运行,我也没有收到任何消息(subber.js和publisher.js)

3:首先我运行publisher.js然后subber.js我将收到的消息

我真的不明白该示例程序是否有效请帮助我了解zmq的发布者订阅者模式以及一些示例代码(**在示例中,一旦发布者发送我发送给我的消息,我没有使用setinterval bcoz订阅者请提供一些样本来理解并完成此事)

由于

1 个答案:

答案 0 :(得分:0)

首先启动发布者时,发布者发送消息(不发送任何消息),因此,在subber启动时,它不会获得任何消息。

首先。您应该使用同步绑定。尚未创建套接字,但是您已经尝试发送一些东西。

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

尽管如此,它并没有帮助我。我认为bindSync不能同步((((。因此,如果应用程序启动,我必须使用计时器来发送消息。

setTimeout( () => { pub.send(['t',loop++ + ' pub msg']); pub.send(['t',loop++ + ' pub msg']); }, 1000);