[그림 1] Handshake 이후 형성된 실시간 양방향 통신 터널 (WebSocket 구조)
HTTP Polling(주기적 요청)과 WebSocket 통신 방식을 비교한 다이어그램입니다.
서버와의 연결 상태가 변하거나 데이터가 도착할 때 발생하는 이벤트들입니다.
| 이벤트명 | 발생 시점 및 설명 |
|---|---|
open (onopen) |
서버와의 핸드셰이크가 성공하여 데이터 송수신 준비가 완료되었을 때 발생합니다. |
message (onmessage) |
서버로부터 데이터를 수신했을 때 발생합니다. event.data 속성을 통해 메시지를 읽을 수 있습니다. |
error (onerror) |
통신 중 에러가 발생했을 때 호출됩니다. |
close (onclose) |
서버와의 연결이 종료되었을 때 발생합니다. 서버 다운, 네트워크 단절, 명시적 close 호출 시 발동됩니다. |
| 메서드명 | 설명 |
|---|---|
send(data) |
서버로 데이터를 전송합니다. 문자열뿐만 아니라 Blob, ArrayBuffer 등의 바이너리 데이터도 보낼 수 있습니다. |
close([code, reason]) |
웹소켓 연결을 명시적으로 종료합니다. 선택적으로 상태 코드와 종료 사유를 전달할 수 있습니다. |
| 속성명 | 설명 |
|---|---|
readyState |
현재 연결 상태를 나타내는 숫자값입니다. (0: CONNECTING, 1: OPEN, 2: CLOSING, 3: CLOSED) |
bufferedAmount |
send()를 통해 큐에 등록되었지만 네트워크를 통해 아직 전송되지 않은 데이터의 바이트 크기를 반환합니다. |
url |
인스턴스가 연결된 절대 URL을 반환합니다. |
<!-- index.html -->
<div class="chat-container">
<div class="chat-header">
<div style="font-weight: 600;">WebSocket Echo Server</div>
<div>
<span class="status-dot" id="statusDot"></span>
<span class="status-text" id="statusText">연결 중...</span>
</div>
</div>
<div class="chat-messages" id="chatMessages">
<!-- 메시지들이 여기에 추가됩니다 -->
</div>
<form class="chat-input-area" id="chatForm">
<input type="text" id="messageInput" class="chat-input" placeholder="메시지를 입력하세요..." autocomplete="off" disabled>
<button type="submit" id="sendBtn" class="send-btn" disabled>전송</button>
</form>
</div>