WebSocket 은 자동으로 재연결하지 않아
EventSource 와 달리 브라우저 기본 WebSocket 은 연결이 끊겨도 스스로 다시 연결하지 않아. 애플리케이션마다 정책이 달라서 의도적으로 빠진 기능이야. 채팅은 적극적으로 재연결해야 하지만 한 번만 받는 내보내기 스트림은 그럴 필요가 없지. 프로토콜이 이 선택에 끼어들지 않는 거야.
지터를 더한 지수 백오프
널리 쓰는 방식은 지터를 더한 지수 백오프야. 실패 뒤 min(base * 2^retry, cap) 만큼 기다리고 여기에 ±25% 의 무작위 지터 를 더해. 클라이언트 10,000개가 동시에 재연결할 때 회복 중인 서버로 같은 순간에 몰려드는 ‘thundering herd’를 막아 주지. open 마다 재시도 횟수를 초기화해야 해.
1000 종료는 건너뛰어
코드 1000 으로 정상 종료했다면 애플리케이션이 요청한 일이므로 재연결하지 마. 1001, 1006, 1011 과 대부분의 4xxx 코드에는 재연결해도 돼. 다만 인증이 만료됐다는 4001 에는 무작정 재연결하지 말고 다시 인증하라는 안내를 띄워.