当我依赖 net 模块
构建自己的 http 模块
时,我想为每个新套接字设置超时。
我构建了以下内容:
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) {
});
最佳答案
您作为回调传递给 socket.setTimeout 的内容是 server.timeoutCallBack()
的结果,它是未定义
。您没有在该行之后 2 分钟调用 timeoutCallBack
,而是在该行上调用了它,并且 setTimeout
什么也没调用。
您应该将对函数的引用传递给 setTimeout
:
socket.setTimeout(server.timeout,server.timeoutCallBack);
关于javascript - 为每个新套接字设置超时node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21060306/