【发布时间】:2014-08-15 23:48:39
【问题描述】:
我已经构建了两个 Javascript 文件,我在 zeroMQ 和 node.js 中实现了响应者和请求者。一旦我启动它们,第一个发送所有请求,但第二个代码 sn-p 没有收到它们。我将它们绑定到相同的地址和端口。对吗?
这里是请求者:
// Erstelle zeroMQ-Socket
var zmq = require('zmq')
var requester = zmq.socket('req');
// Request-Client verbindet sich mit TCP-Socket
requester.connect('tcp://localhost:5000');
var replyNbr = 0;
// Erhalte Nachricht auf Request
requester.on('message', function(msg) {
console.log('got reply', replyNbr, msg.toString());
replyNbr += 1;
});
// Sende request an Server
for (var i = 0; i < 10; ++i) {
requester.send("Hello");
console.log("Sende Request" + (i+1));
}
这里是响应者:
// Erstelle Socket-Verbindung
var zmq = require('zmq')
var responder = zmq.socket('rep');
// Verbinde zum TCP-Socket
responder.connect('tcp://localhost:5000');
console.log('Warte auf Request...');
// Warten bis Request ankommt
responder.on('message', function(msg) {
console.log('received request:', msg.toString());
// Warte eine Sekunde und schicke Antwort
setTimeout(function() {
responder.send("World");
}, 1000);
});
编辑以包含以下答案中发布的信息:
我现在转到 zmq node_modules 目录的 req_rep.js 示例。有这个例子:
/*
*
* One requester two responders (round robin)
*
*/
var cluster = require('cluster')
, zeromq = require('zmq')
, port = 'tcp://127.0.0.1:12345';
if (cluster.isMaster) {
//Fork servers.
for (var i = 0; i < 2; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
//requester = client
var socket = zeromq.socket('req');
socket.identity = 'client' + process.pid;
socket.bind(port, function(err) {
if (err) throw err;
console.log('bound!');
setInterval(function() {
var value = Math.floor(Math.random()*100);
console.log(socket.identity + ': asking ' + value);
socket.send(value);
}, 100);
socket.on('message', function(data) {
console.log(socket.identity + ': answer data ' + data);
});
});
} else {
//responder = server
var socket = zeromq.socket('rep');
socket.identity = 'server' + process.pid;
socket.connect(port);
console.log('connected!');
socket.on('message', function(data) {
console.log(socket.identity + ': received ' + data.toString());
socket.send(data * 2);
});
}
这很好,但是当我尝试将请求者放在一个文件中并将响应者放在一个文件中时,就没有任何效果了。有人可以帮我吗?
文件 1:
// Requester (bildet Webserver ab)
// zmq und Adresse einbinden
var zeromq = require('zmq')
, port = 'tcp://127.0.0-1:12345';
// socket erstellen und an Adresse binden
var socket = zeromq.socket('req');
socket.identity = 'client' + process.pid;
socket.bind(port);
console.log('An Port gebunden');
setInterval(function() {
var value = Math.floor(Math.random()*100);
console.log(socket.identity + ': Anfrage ' + value);
socket.send(value);
}, 2000);
socket.on('message', function(data) {
console.log(socket.identity + ': Antwort von Responder ' + data);
});
文件 2:
// Erstelle Socket-Verbindung
var zeromq = require('zmq')
, port = 'tcp://127.0.0.1:12345';
var socket = zeromq.socket('rep');
socket.identity = 'server' + process.pid;
// Responder mit Adresse verbinden
socket.connect(port);
console.log('connected!');
// Auf Anfrage des Client warten
socket.on('message', function(data) {
console.log(socket.identity + ': Erhalten ' + data.toString());
socket.send(data * 2);
});
编辑:找到灵魂!在文件 1 中,端口地址格式错误!现在一切正常!
【问题讨论】:
标签: javascript node.js zeromq