【问题标题】:publisher subscriber pattern of zmq is not working as expectedzmq 的发布者订阅者模式未按预期工作
【发布时间】:2016-11-19 05:02:03
【问题描述】:

我在nodejs中有一个简单的发布/订阅模式示例程序,如下所示

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订阅者请提供一些示例来理解并完成此操作)

谢谢

【问题讨论】:

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


【解决方案1】:

当你首先启动发布者时,发布者发送消息(什么都不做),所以当 subber 启动时,它无法获取任何消息。

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

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

然而它并没有帮助我。我认为 bindSync 工作不同步(((。所以如果应用程序启动,我必须使用计时器发送一些东西。

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

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多