我是新來的node.js,我嘗試使用setTimeout來模擬長連接並希望它異步執行。如何在node.js中異步使用setTimeout
var http = require('http');
http.createServer(function (request, response) {
console.log('New request @ ' + request.url);
(function (response) {
setTimeout(function() {
console.log('Time is up');
response.writeHead(200, {"Content-Type": "text/plain"});
response.end('Hello World\n');
}, 3000);
})(response);
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
但是,上面的代碼表現得像一個同步單線程應用程序,它每3秒只能處理一個請求。
我認爲node.js中的所有內容都應該異步執行。那麼,這裏有什麼問題?
我測試過ab,你說的對,setTimeout是一個異步函數。但是,如果我同時在Chrome中打開多個標籤,它會在5秒鐘間隔內逐一結束,這有點奇怪。 – Jack
我認爲你只是沒有足夠的快速點擊Chrome中的標籤.. :) – balazs
Chrome不會同時請求相同的URL。如果您爲該網址添加了一個變體,例如第一個選項卡請求http://127.0.0.1:8124/0,第二個請求請求http://127.0.0.1:8124/1等,那麼他們應該像你期望的那樣行事。請參閱http://stackoverflow.com/questions/15852011/why-settimeout-blocks-eventloop – Jason