我正在努力学习一些关于node.js的知识,并且我已经达到了阻止点(没有双关语意)。我意识到这个问题之前已经有过各种各样的问题,但我觉得我已经消化了这些答案,但仍然遗漏了一些东西。
以下代码也依据:https://gist.github.com/3866651
基本上,我不相信setTimeout调用是阻塞的,因为立即打印“setTimeout called”行。但是,我很难过为什么它仍然需要整整20秒来连续服务两个请求。
我实际上错过了什么吗?有没有办法在第一个sendTimeout发送响应之前获得第二个请求?
我看过“子进程”,但这似乎与系统调用直接相关,而不是调用javascript函数。
var http = require("http");
function do_thing(response, callback){
var d=new Date();
console.log('calling setTimeout '+d.toLocaleTimeString());
var timer = setTimeout(function(){
var d=new Date();
console.log('timeout callback '+d.toLocaleTimeString());
respond(response);
}, 10000);
var d2=new Date();
console.log('setTimeout called '+d2.toLocaleTimeString());
}
function respond(response){
var d=new Date();
console.log('sending response '+d.toLocaleTimeString());
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("hello at "+d.toLocaleTimeString());
response.end();
}
http.createServer(function(request, response) {
var d=new Date();
console.log('got request '+d.toLocaleTimeString());
do_thing(response, respond);
}).listen(8888);
var d=new Date();
console.log('running... '+d.toLocaleTimeString());
//Two web requests in close succession, still have to wait 20 secs for 2nd request to complete...
//OUTPUT AS FOLLOWS:
//
//running... 12:12:00
//got request 12:12:06
//calling setTimeout 12:12:06
//setTimeout called 12:12:06
//timeout callback 12:12:16
//sending response 12:12:16
//got request 12:12:16
//calling setTimeout 12:12:16
//setTimeout called 12:12:16
//timeout callback 12:12:26
//sending response 12:12:26
答案 0 :(得分:0)
代码看起来很棒。 setTimeout立即返回。 稍后将调用其中的函数(在这种情况下大约10秒)。 这应该有用。