2014-02-08 69 views
2

我已經編寫了一個應用程序,它是我想使用zmq路由器,經銷商模式相互通信的nodejs(主應用程序)和python(客戶端)應用程序。zeromq ROUTER,DEALER消息編碼格式

問題是我無法讀取從客戶端發送到nodejs(路由器)應用程序的消息。 其編碼如何。

代碼如下簡單:

var responder = zmq.socket('router'); 
responder.on('message', function(request) { 
    console.log(request); 
    // i could not read the messages here.its obfuscated 
}); 

responder.bind('tcp://127.0.0.1:8000', function(err) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log('Listening on 8000...'); 
    } 
}); 

蟒蛇:

socket = context.socket(zmq.DEALER) 
     socket.connect("tcp://127.0.0.1:8000") 
     socket.send('blaaaa') 
     print 'message sent!' 

回答

0

爲您的應用,PUSH-PULL似乎更爲合適:

var zmq = require('zmq'); 

var responder = zmq.socket('pull'); 
responder.on('message', function(request) { 
    console.log(request.toString()); 
    // Use `toString` to convert Buffer to string 
}); 

responder.bind('tcp://127.0.0.1:8000', function(err) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log('Listening on 8000...'); 
    } 
}); 

import zmq 

context = zmq.Context() 
socket = context.socket(zmq.PUSH) 
socket.connect("tcp://127.0.0.1:8000") 
socket.send('blaaaa') 
print 'message sent!' 
2

如果您希望使用DEALER/ROUTER套接字,那麼該消息實際上是作爲回調函數的第二個參數給出的。

var responder = zmq.socket('router'); 
responder.on('message', function(header, body) { 
    console.log(body.toString('utf8')); 
}); 

該消息是在緩衝器中的格式,但可以使用的ToString(編碼)將其轉換成字符串;

標題包含一個標識,這允許您稍後將響應/應答發送回發出原始請求的正確發件人/請求者。