我正在编写一个基于net
模块(家庭作业)的动态HTTP服务器,如果服务器用户在两秒钟后没有调用408
,则会发送response.end()
响应。
无论我尝试什么,都不会调用该函数。这是另一个代码,它演示了我在程序中尝试做的事情:
var NET = require("net");
var server = NET.createServer(function(socket){
console.log("In connectionHandler");
socket.on('data',function(data) {
console.log("New data");
var timer = setTimeout(function(end){
console.log("INSIDE TIMEOUT FUNCTION");
if (end) {
return;
}
throw new ERROR.ServerError('408',' Request Timeout','The \
server has timedouted');
},10,true);
for (var t = 0 ; t < 100000000000 ; t++){}
clearTimeout(timer);
})
});
server.listen(4000, function() {
console.log("server bound");
});
因此,超时设置为10毫秒,然后是一个非常长的循环,但这不起作用。
为什么会这样?
答案 0 :(得分:5)
永远不会调用回调,因为setTimeout是异步的。当“转弯”结束时,计时器被激活,你在转弯结束前清除超时。
您应首先阅读有关javascript事件驱动架构的信息。 This tutorisal将是一个良好的开端。这对于解决您的超时问题至关重要。