javascript - http.Server 클래스◔ ‸◔의 close() 메소드에 대한 질문이 있습니까?
为情所困
为情所困 2017-05-16 13:42:34
0
1
744

코드

으아악

설명

server.close(),却不能触发 close이벤트를 이용하나요?
HTTP API 설명을 살펴보세요:

서버에서 새 연결 수신을 중지하세요.

그리고 TCP API 설명:

서버가 새 연결 수락을 중단하고 기존 연결만 유지하게 합니다. 이 기능은 비동기식입니다. 모든 연결이 끊어지면 서버가 닫히고 'close' 이벤트가 발생합니다...

오리지널server.close() 只是使服务器停止接收新连接,并没有直接操作关闭服务器。只有当所有连接都断开的时候,服务器才会处于关闭状态并且发射 close 이벤트.

단, 코드를 지연통화로 변경하면 바로 서버가 종료될 수 있습니다. (물론 HTTP연결이 5초 이내에 이루어져야 합니다.)

으아악

질문

API의 설명을 따르면 close()메서드는 서버가 새 연결을 수락하는 것을 중지합니다. 그렇다면 후자의 방법으로 변경하여 서버를 바로 종료할 수 있는 이유는 무엇일까요?

为情所困
为情所困

모든 응답(1)
PHPzhong

API 설명이 정확합니다. 테스트할 때 오해한 것일 뿐입니다. 두 가지 유형의 종료 http 서비스는 결국 종료되지만 실행 논리는 다릅니다.

실행 프로세스

Code 1은 http 연결을 요청할 때까지 http 연결을 닫지 않고 http 연결을 설정할 때까지 기다린 다음 이 요청 후 2분 후에 http 서비스를 닫습니다.

Code 2는 5초 동안 연결을 기다리지 않으면 http 서비스가 바로 종료됩니다. 5초 이내에 http 연결을 요청하면 요청 후 2분 후에 http 서비스가 종료됩니다.

프로세스 실행 이유

server.close()는 서버가 새로운 연결을 수신하는 것을 중지할 뿐 서버를 직접 종료하지는 않는 것으로 나타났습니다. 모든 연결이 끊어진 경우에만 서버가 종료되고 닫기 이벤트가 발생합니다. 문제는 언제 모든 연결이 끊어진 것으로 간주됩니까? 原来 server.close() 只是使服务器停止接收新连接,并没有直接操作关闭服务器。只有当所有连接都断开的时候,服务器才会处于关闭状态并且发射 close 事件。 问题在于什么时候算所有连接都断开

当你执行 res.end('res ok'); 的时候,http 连接并没有关闭,因为你的请求的 Connectionkeep-alive

res.end('res ok');를 실행하면 현재 요청의 Connectionkeep-alive이므로 http 연결이 닫히지 않습니다. 단지 http 서비스가 데이터를 반환하고 브라우저가 페이지를 렌더링하며 http 연결이 여전히 열려 있는 것뿐입니다. 그런 다음 2분 이내에 새 요청을 하지 않으면 이번에는 http 연결이 닫힙니다. http 서비스(http 요청 아님)의 기본 시간 초과는 2분입니다.

곧🎜
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿