2
net 모듈을 기반으로 HTTP 서버를 구현하려고합니다.
keep-alive를 구현해야하므로 sock.setKeepAlive(true)
을 호출 한 다음 sock.setTimeout
을 호출하여 2 초의 시간이 초과 된 후에 소켓을 닫습니다.
여기 내 코드입니다 :
node.js의 socket.setTimeout()
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 초 후 새로 고침을 할 경우는 예외가 발생합니다 -
을Error: This socket has been ended by the other party at Socket.writeAfterFIN [as write] (net.js:274:12)
타임 아웃에 댓글을 달면 everthing이 잘 작동합니다.
내 코드가 잘못 되었나요?
후 시간 제한 함수 내에서
sock.destroy()
을 추가하는 것입니다 * TCP * 킵 얼라이브 및 HTTP 킵 얼라이브를 구현 구성하지 않는 비현실적으로 읽기 제한 시간을 설정. 그들은 완전히 다른 것들입니다. HTTP 킵 얼라이브 (keepalive)는 커넥션을 * 열린 상태로 유지하고 그렇게 말할 적절한 헤더를 보내야합니다. – EJPTnx for answer.So 소켓에 타임 아웃을 지우고'Connection : Keep-Alive' 헤더를 추가하고 타임 아웃시'Connection : close' 만 보내야합니다 (2 초 -받은 사양입니다)? –