socket.setTimeout() in node.js

socket.setTimeout() in node.js

本文关键字:node js in setTimeout socket      更新时间:2023-09-26

我尝试实现基于。net模块的http服务器。
我需要在其中实现keep-alive,所以我调用sock.setKeepAlive(true),然后sock.setTimeout在2秒超时后关闭套接字。
下面是我的代码:

var server = net.createServer({ allowHalfOpen: false},socketListener);
function start(port){
    server.listen(port,'localhost');
}
function socketListener(sock){
    sock.setEncoding("utf8");
    sock.setKeepAlive(true);
    sock.setTimeout(2000,function(){
        sock.end("HTTP/1.1 200 OK'r'nConnection: close'r'n'r'n");
    });
    sock.on("data",responser.responserCreator(sock,httpParser,baseDir,stat));
}

但是当我打开浏览器并第一次到http://localhost:1234/profile.html时,它工作得很好,但如果我在2秒后刷新,它会抛出一个异常-

错误:此套接字已被另一方在套接字上结束。writeAfterFIN [as write] (net.js:274:12)

如果我注释了超时,一切都可以正常工作。
我的代码有什么问题?

解决方法是在超时函数中sock.end()之后添加sock.destroy()