남용의 두 축
WebSocket 남용에는 한 출처가 너무 많은 연결 을 여는 경우와 연결 하나가 너무 많은 메시지 를 보내는 경우가 있어. 대응 방식도 달라. 연결 수 제한은 파일 디스크립터와 메모리 같은 서버 자원 고갈을 막고, 메시지 속도 제한은 연결을 끊지 않으면서 시끄럽거나 악의적인 클라이언트를 제어해.
IP 별 연결 수 제한
출발지 IP 마다 활성 연결 수를 추적하고 상한을 넘으면 코드 4029 로 거절해. HTTP 429 와 비슷하게 쓰는 애플리케이션 관례야. 프록시 뒤에서는 websocket.client.host 가 실제 클라이언트가 아닌 프록시 IP 일 수 있으니 조심해. 역방향 프록시가 X-Forwarded-For 를 올바르게 설정한다면 그 값을 써.
연결별 메시지 속도 제한
WebSocket 마다 최근 메시지 시각을 추적해. 지난 1초 동안 상한을 넘으면 그 메시지를 버리고 {type: 'error', code: 'rate_limited'} 로 응답해. 곧바로 연결을 닫으면 네트워크 장애처럼 보여 지나친 대응이 돼. 남용한 메시지만 버리고 연결은 유지해.