2011-08-15 2 views
36

Socket.io를 사용하면 하트 비트를 사용하여 "Socket.IO 연결 상태 확인"을 할 수 있습니다. 하트 비트는 정확히 무엇이며 왜 사용해야합니까, 사용하지 않아야합니까?socketio 하트 비트 사용의 장점/단점

+1

놀라운 질문입니다. –

답변

52

하트 비트는 주기적 간격으로 클라이언트에서 서버 (또는 서버에서 클라이언트로 그리고 서버로 돌아 오는)로 전송되는 작은 메시지로, 클라이언트가 여전히 주변에 있고 활성 상태인지 확인합니다.

예를 들어, 채팅 룸을 제공하는 Node.js 앱이 있고 사용자가 몇 분 동안 아무 것도 말하지 않으면 실제로 연결되어 있는지 확인할 방법이 없습니다. 미리 정해진 간격으로 (예 : 15 초마다) 고음声을 보내어 클라이언트는 서버에 여전히 있음을 알립니다. 예를 들어 서버가 클라이언트로부터 하트 비트를받은 후 20 초가 지나면 연결이 끊어졌습니다.

cannot be guaranteed a clean connection termination over TCP - 클라이언트가 충돌하거나 클라이언트에서 종료 패킷을받지 못하고 클라이언트가 연결이 끊어 졌다는 것을 알지 못하기 때문에이 작업이 필요합니다. 또한 Socket.IO는 데이터 전송을위한 다양한 다른 메커니즘 (TCP 소켓 제외)을 지원하며 이러한 경우 클라이언트는 서버에 종료 메시지를 보내지 못합니다.

는 기본적으로 Socket.IO 클라이언트가 서버에 매 15 초 (하트 비트 간격를) 하트 비트를 보낼 것이다 서버 (하트 비트 시간 제한) 20초에 클라이언트에서 들어 있지 않은 경우를 연결이 끊어진 클라이언트를 고려합니다.

아마 하트 비트를 사용하고 싶지 않은 많은 평균 사용 사례를 생각할 수 없습니다.

+1

왜 그들이 필요한지 명확히해야 할 가치가 있습니까? 왜 서버는'onclose' 이벤트/콜백을 통해 연결을 끊는 클라이언트를 감지하지 못합니까? – leggetter

+0

전화 통화가 적절합니다. 나는 그것을 조금 업데이트했다. –

+0

매우 명확한 업데이트. 건배. – leggetter

관련 문제