Node.js nodejs sampel代码中的发布者订阅器模式未使用out setinterval
我正在尝试实现pub/sub,如下所示 publisher.jsNode.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
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(“”)的值你可能是对的。但在你的情况下,我会在任何情况下设置一个消息标识符。我不知道如何订阅。是否有一个文档可以供我参考并完成它