gpt4 book ai didi

javascript - Node.js 和 zeroMQ 请求和响应

转载 作者:行者123 更新时间:2023-11-29 15:38:15 27 4
gpt4 key购买 nike

我已经构建了两个 Javascript 文件,我在 zeroMQ 和 node.js 中实现了响应者和请求者。一旦我启动它们,第一个发送所有请求,但第二个代码片段不接收它们。我将它们绑定(bind)到相同的地址和端口。是吗?

这是请求者:

// 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地址:端口。通常,您会选择充当“服务器”的一侧或更可靠绑定(bind)的一侧,您将与“客户端”或来来往往的一侧连接。这看起来只是一个基本示例,因此您选择哪一方并不重要。

为了举个例子,我假设你想让你的 REP 套接字绑定(bind):

// 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 在生产中取决于您的情况。

关于javascript - Node.js 和 zeroMQ 请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24408257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com