【发布时间】:2014-07-24 21:14:09
【问题描述】:
我正在尝试构建Paranoid Pirate Pattern 的后半部分,这是一个将工作发送到一组 DEALER 节点的 ROUTER(我可能误解了图表)。现在我只想让经销商回应工作,或者只是发回一条“完成”的消息。问题是工作节点(DEALER)从不接收任何消息。
var buildSocket, connectionTemplate, delay, frontPort, log, q, qPort, worker, workerPort, zmq;
zmq = require("zmq");
frontPort = 5000;
qPort = 5100;
workerPort = 5200;
connectionTemplate = "tcp://127.0.0.1:";
log = console.log;
debugger;
delay = process.argv[2] || 1000;
buildSocket = function(desc, socketType, port) {
var socket;
log("creating " + socketType + " socket");
socket = zmq.socket(socketType);
socket.identity = "" + desc + "-" + socketType + "-" + process.pid + "-" + port;
return socket;
};
q = buildSocket('q_output', 'router', qPort);
worker = buildSocket('worker', 'dealer', workerPort);
worker.bind("" + connectionTemplate + workerPort);
q.connect("" + connectionTemplate + workerPort);
q.on('message', function() {
var args;
args = Array.apply(null, arguments);
log('queue received ' + JSON.stringify(arguments));
return worker.send('work done');
});
worker.on('message', function() {
var args;
log('back received ' + JSON.stringify(arguments));
args = Array.apply(null, arguments);
return q.send(args);
});
setInterval((function() {
var value;
value = Math.floor(Math.random() * 100);
console.log(q.identity + ": sending " + value);
q.send(value);
}), delay);
队列和工作线程on 'message' 事件永远不会触发。我理解的方式是您设置 ROUTER 节点,将其绑定到端口(用于返回消息),设置 DEALER 节点并将它们绑定到端口,然后将 ROUTER 连接到 DEALER 端口并开始发送消息。在实践中,消息被发送但从未被接收:
creating router socket
creating dealer socket
q_output-router-60326-5100: sending 30
q_output-router-60326-5100: sending 25
q_output-router-60326-5100: sending 65
q_output-router-60326-5100: sending 68
q_output-router-60326-5100: sending 50
q_output-router-60326-5100: sending 88
【问题讨论】: