Node.js和zeroMQ请求和响应
Node.js and zeroMQ request and response
我已经构建了两个javascript文件,其中我在zeroMQ和node.js中实现了响应器和请求器。一旦我启动它们,第一个发送所有请求,但第二个代码片段不接收它们。我把它们绑定到同一个地址和端口。对吗?
这是请求者:
// 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中,端口地址格式错误!现在一切正常了!
您已经在通信的两侧使用了connect
,您需要一侧到connect
,另一侧到bind
到地址:端口。通常情况下,您将选择充当"服务器"的一方或绑定更可靠的一方,并且您将与"客户端"连接,或者将来来去去的一方。这看起来只是一个基本的例子,所以你选择哪条边是哪条并不重要。
作为示例,我将假设您希望REP
套接字绑定:
// Erstelle Socket-Verbindung
var zmq = require('zmq')
var responder = zmq.socket('rep');
// Verbinde zum TCP-Socket
responder.bindSync('tcp://localhost:5000');
console.log('Warte auf Request...');
…您将看到我使用了bindSync
,这只是从您的代码中删除了异步关注点,您是否想在生产中使用bind
或bindSync
取决于您的情况。
相关文章:
- 如何将getJson的响应保存在全局变量中
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 使用angularjs向浏览器发送servlet响应(下载功能)
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 为什么可以't我使用了AJAX响应的一部分
- 响应动画手风琴不工作
- 如何在php中的jquery中对循环内的选择框值求和
- 如何从SeleniumWebdriver获取异步Javascript响应
- Ajax调用在Firefox中不会自动响应
- 可以在响应时隐藏iphone上的“播放”按钮以进行视频播放
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- 如何在 JavaScript 和 HTML 中更改对输入框的提示响应
- IIS动态HTTP响应标头
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Ajax响应转换
- 如何在jquery中使用实时计算求和值
- 使Intro.js工具提示响应
- 如何捕获页面上的所有请求和响应,并根据每个响应状态的需要执行操作
- 对JSON数组响应中的值求和