WebSocketDisconnect 가 신호
클라가 close — clean 이든 abrupt 든 — 다음 receive_* 호출이 WebSocketDisconnect raise. 예외에 .code (close code) 와 .reason (close frame reason) 들어있어. session 끝났다는 단일 권위 신호.
Cleanup 은 except 블록에
connect 에서 set up 한 모든 거 (connection manager 에 추가, heartbeat task 등록, DB row 열기) 여기서 tear down. 패턴은 connect → register → try/loop/except → unregister. unregister 건너뛰지 마; orphan reference 가 WebSocket 서버가 scale 에서 메모리 leak 하는 방식.
다른 예외도 일어나
message handler 의 application 버그가 자기 예외 던져. 별도로 catch 해서 클라한테 structured error 돌려주고 깔끔히 close.