当我依靠http module
构建自己的net module
时,我想为每个新套接字设置超时。
我建立了以下内容:
server = net.createServer(function (socket) {
if(server.timeout==null){
server.timeout=120000;
if(server.timeoutCallBack==null){
server.timeoutCallBack=function(){socket.destroy();};
}
}
socket.setTimeout(server.timeout,server.timeoutCallBack());
因此,如果我的服务器的用户设置了新的超时持续时间,它将使用它。如果没有,它的默认值为2分钟。
我的问题是我的服务器不提供第一个连接,只是第二个连接。我的意思是,对于它获得的第一条http消息,它不会调用我的:
socket.on("data", function (data) {
});
答案 0 :(得分:4)
作为回调传递给socket.setTimeout的是server.timeoutCallBack()
的结果,即undefined
。不是在该行之后2分钟调用timeoutCallBack
,而是在该行上调用它并且setTimeout
什么都没有。
您应该将对函数的引用传递给setTimeout
而不是:
socket.setTimeout(server.timeout,server.timeoutCallBack);