zeromq ROUTER,DEALER消息编码格式
我已经写了一个应用程序,它是使用zmq Router,Dealer模式相互沟通的nodejs(主应用程序)和python(客户端)应用程序。
问题是我无法读取从客户端发送到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...'); } });
python:
socket = context.socket(zmq.DEALER) socket.connect("tcp://127.0.0.1:8000") socket.send('blaaaa') print 'message sent!'
如果你想使用DEALER / ROUTER套接字,那么这个消息实际上是作为callback函数的第二个参数给出的。
var responder = zmq.socket('router'); responder.on('message', function(header, body) { console.log(body.toString('utf8')); });
消息格式为Buffer,但可以使用.toString(encoding)将其转换为string。
标题包含一个标识,这允许您稍后将响应/应答发送回发出原始请求的正确发件人/请求者。
对于你的应用程序,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!'
- 为什么会得到“TypeError:Reflect.getOwnMetadata不是一个函数”
- 带有node.js的Elastic Beanstalk启动错误
- 清理node_modules文件夹以进行部署和装运
- Express Static和setHeaders:“错误:发送后无法设置标头。”
- 什么是包含'ref'但不指定types的Mongoose模型属性?
- process.cwd()和process.env.PWD有什么区别?
- 允许CORS REST请求到express / node.js应用程序
- 通过exec()从php运行服务器端js
- MongoDB / Node:将集合中的文档的一部分插入另一个集合中的文档