Я только что начал играть с node.js и привязками zeromq сегодня и вижу поведение, которое я не совсем понимаю.
Вот мой пример кода, который вызывает другой процесс REP на основе ruby на основе ruby в порту9000 на той же машине:
var zeromq = require("zmq");
var http = require('http');
var counter = 0;
var availabilityResponse = function(counter, data, request, response) {
var str = data.toString('utf-8');
console.log(str);
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(str);
response.end();
}
var zmqSocket = zeromq.createSocket('request');
zmqSocket.connect("tcp://127.0.0.1:9000");
var server = http.createServer()
server.on('request', function(request, response) {
counter += 1;
zmqSocket.send("Hola! - This is call # " + counter);
zmqSocket.on('message', function(data) {
availabilityResponse(counter, data, request, response);
});
});
server.listen(8888);
console.log("Starting HTTP server on port 8888");
Я бью сервер узлов, используя мой браузер, и жду ответа.Что странно, так это то, что вывод, который я получаю в консоли, происходит аддитивным способом, который я не обманывал:
Request received: Hola! - This is call # 1 - Now going to sleep for 1.0
Request received: Hola! - This is call # 2 - Now going to sleep for 3.0
Request received: Hola! - This is call # 2 - Now going to sleep for 3.0
Request received: Hola! - This is call # 3 - Now going to sleep for 3.0
Request received: Hola! - This is call # 3 - Now going to sleep for 3.0
Request received: Hola! - This is call # 3 - Now going to sleep for 3.0
Request received: Hola! - This is call # 4 - Now going to sleep for 2.0
Request received: Hola! - This is call # 4 - Now going to sleep for 2.0
Request received: Hola! - This is call # 4 - Now going to sleep for 2.0
Request received: Hola! - This is call # 4 - Now going to sleep for 2.0
Я попытался переместить вызов zmqSocket.on () за пределы запроса httpблок, который удаляет аддитивное поведение, но также не включает в себя объекты запроса / ответа, которые мне нужны.
Смысл этого упражнения заключается в том, чтобы браузер дождался ответа от долго выполняющегося процесса сервера zeromq на порту 9000 (в настоящее время это просто ложный ответ спящего режима).
Я почти уверен, что неправильно понимаю обратный вызов, но не могу найти много документации по этому сценарию.
Спасибо за любую помощь.