적은 수의 클라이언트에 연결하여 Node.js net 소켓 서버를 올바르게 실행 중입니다. 200 개의 클라이언트 연결 수를 늘리면 모든 초기 연결이 설정되고 올바르게 통신하지만 Ctrl-C를 눌러 클라이언트 프로그램을 닫으면 서버에서 일부만 끊어집니다 (오류 : ECONNRESET 메시지 읽기).).Node.js 클라이언트가 일부 클라이언트 연결을 끊지 못함
이벤트를 듣고 있습니다 : 닫기, 시간 초과, 연결 끊기, 오류 및 종료 데이터 이벤트가 길이 0 데이터를 수신하는지 확인하지만이 상황은 발생하지 않습니다.
동시에 많은 연결이 끊어지면 오류/연결 끊김 이벤트가 발생하지 않는 것처럼 보입니다.
서버와 클라이언트는 실행 중에 예외 나 오류를받지 않습니다. 둘 다 Node.js입니다. -i 여전히 서버
(lsof를 행 서버 개방 접속의 예)
설립 많은 연결을 표시함으로써 두가지NETSTAT -i 모든 연결 클라이언트
에 종료되는 것을 나타낸다
노드 5,569 루트 18U의 IPv4 4,236,971 0t0 TCP의 xxx.xxx.xxx.xxx:2048->xxxxxx.hsd1.ca.comcast.net:12501 (설립)
는 일에 걸쳐 다른 사람 실행을 가지고 뭐야?
이것은 내가 클라이언트의 수천 명의 큐레이터가있을 것이므로 이상적으로 소켓 트래픽을 최대한 줄이고 싶다고 생각한 것입니다. 나는 이와 같은 것을 넣을 것이지만 근본적인 문제를 실제로 해결하지는 않는다고 느낍니다. 흥미롭게도 Node.js [기본적으로 지원] (http://nodejs.org/api/net.html#net_socket_setkeepalive_enable_initialdelay)이 문제를 이미 알고 있었기 때문에 그것이 궁금하다. –
'setKeepAlive()'가 있지만 [예상했던대로하지 않을 수도 있습니다] (http://stackoverflow.com/questions/18614176/why-nodejs-keepalive-does-not-seem-to-work) - 예상대로). IMHO 응용 프로그램 수준의 Keepalive 메시지는 제어 권한이 있기 때문에 더 좋습니다. 너무 자주 보내지 않는 한 keepalive 트래픽에 대해 걱정하지 않을 것입니다. – mscdex
예를 들어 [TCP가 작동하는 방법]에 대한 자세한 내용은 http://www.pcvr.nl/tcpip/tcp_conn.htm에서 확인할 수 있습니다. 클라이언트는 Keepalive가 없으면 서버가 소켓을 처리하기 위해 FIN 패킷을 보내야합니다/소켓의 타임 아웃. TCP 소켓 아래에서 UDP와 같은 것을 고려해보십시오. 응용 프로그램 수준의 Keepalive가이 작업을 수행하는 유일한 일관된 방법 인 것처럼 보입니다. –