Node.js nodejs sampel代码中的发布者订阅器模式未使用out setinterval

Node.js nodejs sampel代码中的发布者订阅器模式未使用out setinterval,node.js,setinterval,zeromq,publish-subscribe,Node.js,Setinterval,Zeromq,Publish Subscribe,我正在尝试实现pub/sub,如下所示 publisher.js var zmq = require('zmq'); var pub = zmq.socket('pub'); pub.bindSync('tcp://127.0.0.1:5555'); pub.send('pub msg'); /* setInterval(function(){ console.log("sending message") },500);*/ subscriber.js var zmq = req

我正在尝试实现pub/sub,如下所示

publisher.js

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

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

pub.send('pub msg');
/*
setInterval(function(){
    console.log("sending message")

},500);*/
subscriber.js

var zmq = require('zmq');
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);
})
上述订户只有在
pub.send('pub msg')时才会收到消息在setInterval中,我不确定我是否理解

我不想使用setInterval,而是必须在信息到达后立即发送

请告诉我如何使用pub/sub,我想我缺少一些基本的理解,请帮助

在nodejs代码中,我尝试使用一个

 router.post('/putMsgIn0MQ', function (req, res, next) {
     pushData(JSON.stringify(req.body))
 })

var pushData = function(dataToPush) {
    var zmqSocket = zmq.socket('pub')
        var zmqPortPart = 'tcp://127.0.0.1:5555'
        zmqSocket.bind(zmqPortPart);
        zmqSocket.send(dataToPush);

}
订户

var sub = zmq.socket('sub');
                sub.connect('tcp://127.0.0.1:5555');
                sub.subscribe('');  //herein lies the question
                console.log('Received msg:');
                sub.on('message',function(msg){
                        console.log('Received msg:');
                        console.log(msg.toString())
                        var jsonPayload = msg.toString();
                        processData(jsonPayload, zmqPortObj.name);
                })

根据此代码,从他们的文档中:

// pubber.js 
var zmq = require('zmq')
   , sock = zmq.socket('pub');

  sock.bindSync('tcp://127.0.0.1:3000');
 console.log('Publisher bound to port 3000');

setInterval(function(){
  console.log('sending a multipart message envelope');
  sock.send(['kitty cats', 'meow!']);
}, 500);
似乎setInterval只是一个实用函数:)

是什么阻止您手动启动它

例如,假想控制器:

exports.animals= {
   getCat: function (request, response) {

   var animal = request.payload.catStuff;

   //process the animal object
  //and manually fire the message like:


sock.send(['kitty cats', 'meow!']);

...

根据此代码,从他们的文档中:

// pubber.js 
var zmq = require('zmq')
   , sock = zmq.socket('pub');

  sock.bindSync('tcp://127.0.0.1:3000');
 console.log('Publisher bound to port 3000');

setInterval(function(){
  console.log('sending a multipart message envelope');
  sock.send(['kitty cats', 'meow!']);
}, 500);
似乎setInterval只是一个实用函数:)

是什么阻止您手动启动它

例如,假想控制器:

exports.animals= {
   getCat: function (request, response) {

   var animal = request.payload.catStuff;

   //process the animal object
  //and manually fire the message like:


sock.send(['kitty cats', 'meow!']);

...

我正在尝试构建一个模块,该模块在发布消息时不涉及计时器订阅者应该得到它Hanks是的,我知道这只是一个实用程序,我有一个发布消息的路径router.post('/putMsgIn0MQ',function(req,res,next){pushData(queueItem,JSON.stringify(req.body)))这避免了自动提示整个pubber.js都在pushData中,但订户没有收到消息不知道为什么请发布到目前为止的代码,让我们看一看:)我正在尝试构建一个模块,它不涉及任何计时器,当消息发布时订阅者应该得到它Hanks是的,我理解它只是一个实用工具,我有一个发布消息路由器的路径。post('/putMsgIn0MQ',function(req,res,next){pushData(queueItem,JSON.stringify(req.body)))这避免了自动提示整个pubber.js都在pushData中,但订阅者没有收到消息不确定原因请发布到目前为止的代码,让我们看看:)您需要订阅发送事件。在您的情况下,您没有订阅任何内容(sub.subscribe(“””)。订阅:sock.subscribe('kitty cats');发布:sock.send(['kitty cats','meow!']);“kitty cats”是这里的关键字:)当我们没有指定它意味着获取所有消息时,请仅与潜在客户一起对示例说明sub.subscribe(“”)的值你可能是对的。但是在你的情况下,我会在任何情况下设置一个消息标识符。我不确定如何订阅。是否有一个文档,我可以在其中引用并获取它,而你不需要订阅发送事件。在您的情况下,您没有订阅任何内容(sub.subscribe(“””)。订阅:sock.subscribe('kitty cats');发布:sock.send(['kitty cats','meow!']);“kitty cats”是这里的关键字:)当我们没有指定它意味着获取所有消息时,请仅与潜在客户一起对示例说明sub.subscribe(“”)的值你可能是对的。但在你的情况下,我会在任何情况下设置一个消息标识符。我不知道如何订阅。是否有一个文档可以供我参考并完成它