2016-11-16 11 views
1

Я пытаюсь реализовать паб/к югу, как показано нижеиздатель шаблон subscribber в nodejs код sampel не woring с вне setinterval

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, а я должен послать сообщение, как только он прибыл

Пожалуйста сказать, как я могу сделать это с помощью паб/суб только я предполагаю, что есть некоторые базовые знания отсутствуют, пожалуйста, помогите

в 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); 
       }) 
+0

Вы должны подписаться на передающем события. В вашем случае вы не подписаны ни на что (sub.subscribe ('' ")). Подписаться: sock.subscribe ('kitty cats'); Опубликовать: sock.send (['kitty cats', 'meow!' ]); «кошки-кошки» - это ключевое слово здесь :) –

+0

, когда мы не укажем, что это означает получить все сообщение, так что, пожалуйста, скажите с перспективой на образец, что должно быть значением sub.subscribe ('' '). –

+0

Возможно, вы правы. Но в вашем случае я бы установил идентификатор сообщения в любом случае. –

ответ

0

на основе этого кода, от их дел cumentaiton:

// 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!']); 

... 
+0

Я пытаюсь создать модуль, который не содержит таймера, когда когда-либо опубликовано сообщение, подписчик должен получить его –

+0

спасибо да, я понял, что это просто утилита, у меня есть маршрут для публикации сообщения router.post ('/ putMsgIn0MQ', function (req, res, next) { pushData (queueItem, JSON.stringify (req.body)) }), которые избегают автоматического timmer весь pubber.js находится в pushData, но абонент не получает сообщение, не уверен, почему это –

+0

Пожалуйста, разместите код, который у вас есть, давайте посмотрим :) –