我在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订阅者请提供一些样本来理解并完成此事)
由于
答案 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);