2013-06-08 1 views
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이 잘 작동합니다.
내 코드가 잘못 되었나요?

+3

후 시간 제한 함수 내에서 sock.destroy()을 추가하는 것입니다 * TCP * 킵 얼라이브 및 HTTP 킵 얼라이브를 구현 구성하지 않는 비현실적으로 읽기 제한 시간을 설정. 그들은 완전히 다른 것들입니다. HTTP 킵 얼라이브 (keepalive)는 커넥션을 * 열린 상태로 유지하고 그렇게 말할 적절한 헤더를 보내야합니다. – EJP

+0

Tnx for answer.So 소켓에 타임 아웃을 지우고'Connection : Keep-Alive' 헤더를 추가하고 타임 아웃시'Connection : close' 만 보내야합니다 (2 초 -받은 사양입니다)? –

답변

2

이 솔루션은 바로 사용 sock.end()