readyState 가 전송을 지키는 문이야
OPEN 상태가 아닌 연결에서 ws.send() 를 호출하면 InvalidStateError 가 발생해. try/catch 로 감싸는 게 답은 아니야. 먼저 readyState 를 확인하거나 연결이 열릴 때까지 메시지를 대기열에 넣어야 해. ‘지금 보낼 수 있는가?’를 판단하는 단일 기준으로 readyState 를 사용해.
네 가지 상태 값
0 CONNECTING 은 핸드셰이크 중, 1 OPEN 은 프레임을 보낼 수 있는 상태, 2 CLOSING 은 종료 핸드셰이크가 시작된 상태, 3 CLOSED 는 완전히 종료된 상태야. WebSocket.OPEN 같은 정적 상수를 쓰면 의미를 알기 어려운 숫자 대신 ws.readyState === WebSocket.OPEN 처럼 읽기 좋은 조건을 만들 수 있어.