2012-07-30 2 views
1

질문은 간단하지만이 경우에 어떤 일이 발생할지 모르겠 음 일반 시나리오 : 어떤 문제 또는 실패/시스템 오류 (모든 종류의 오류, 등) 브라우저가 충돌, 실행중인 websocket 연결이 어떻게됩니까? 그것이 닫히게 될 것인가, 아니면 그 주 (州)가 될 것인가?브라우저 충돌시 웹 소켓 연결

나는 netty websocket 구현을 사용하고 있습니다. 위의 시나리오에서 구체적으로 netty websocket 구현에서 무엇이 발생합니까? (시도했을 때, 나는 이것을 얻는다 : 나는 브라우저를 수동으로 닫으면 연결이 닫히지 만 브라우저 프로세스를 죽이면 이런 일은 일어나지 않는다.) 연결이 닫히지 않으면 메시지를 보내는 동안 어떻게 처리하고 처리 할 수 ​​있습니까? 그렇지 않으면 메시지를 보내는 동안 ClosedChannelException이 메시지를 보내려고 할 때 발생합니다.

편집 : 위에서 언급 한 오류를 확인하는 것 외에도 netty 구현을 사용할 때 websocket 연결이 닫혔다는 것을 알 수있는 방법이 있습니까?

답변

4

나는 당신이 ClosedChannelException을 잡아서 깨끗하게 닫힌 연결과 같은 방식으로 처리해야한다고 생각한다.

websocket 세션이 비싸고 더 빨리 종료 된 연결을 감지하려는 경우 주기적으로 각 클라이언트에 ping 요청을 보낼 수 있습니다. Netty에는 PingWebSocketFrame 클래스가 있는데,이 클래스는이를 지원합니다.

+0

첫 번째 대안은 괜찮은 것처럼 보이지만 두 번째 옵션은 흠 ... 웹 소켓을 사용하여 불필요하게 주기적으로 ping을 수행해야하며 (웹 소켓의 장점이기도 함) 킬 (kill) 된 연결을 발견하려고 한 이유가 예외가 던져진다는 사실. – Rndm

+1

@shg 정기적 인 ping은 필요하지 않습니다. 난 당신이 죽은 연결을 발견 ClosedChannelException 때까지 기다릴 수없는 경우에만 옵션으로 그들을 포함 시켰습니다. – simonc