我剛剛開始使用node.js和zeromq綁定,看到一些我不太明白的行爲。node.js被多次調用的回調
這裏是我的示例代碼,同一臺機器上調用另一個基於Ruby的zeromq REP過程在端口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");
我用我的瀏覽器擊中節點服務器,並等待響應。奇怪的是,輸出我在控制檯得到跨越進來的添加劑的方式,我不是在所著的Grokking:
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請求塊外,其刪除附加行爲,但它也不包含我需要的請求/響應對象。
這個練習的要點是讓瀏覽器等待響應從端口9000上長時間運行的zeromq服務器進程返回(目前只是假裝睡眠響應)。
我敢肯定,我只是誤解了這裏的回調,但無法找到很多在這種情況下的文檔。
感謝您的任何幫助。
吉姆的回答只是指出了什麼我已經假定,在我原來的問題指出(感謝您抽出時間來回答,雖然)。 任何人都可以幫助如何將事件綁定代碼移出請求處理程序,並仍然允許zmqSocket的on('message')事件訪問http響應對象? – earthtrip