Backend/Socket
[Socket] 웹소켓 (WebSocket)
BenKangKang
2024. 5. 28. 05:21
웹소켓(WebSocket)?
- 양방향 통신 웹소켓은 웹 브라우저와 서버 간의 양방향 통신을 가능하게 하기 위해 설계된 프로토콜
과정
1. 핸드셰이크(Handshake)
- 웹소켓 연결은 표준 HTTP(S) 요청을 통해 초기화됨.
- 클라이언트가 서버에 웹소켓 연결을 요청하고, 서버가 이를 수락하면 HTTP 연결이 웹소켓 연결로 업그레이드됨.
- 클라이언트가 서버에 보낸 HTTP 요청에는 Upgrade: websocket 헤더가 포함
- 서버가 이를 수락하면 응답에 101 Switching Protocols 상태 코드와 함께 웹소켓 프로토콜로의 업그레이드를 명시
// 클라이언트 요청 예시
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
// 서버 응답 예시
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
2. 지속적인 연결(Persistent Connection)
- HTTP 요청-응답 모델과 달리, 웹소켓은 연결이 수립된 후 지속적인 연결 상태를 유지.
- 이를 통해 클라이언트와 서버는 언제든지 서로에게 메시지를 보낼 수 있음.
- 연결이 열린 상태에서는 클라이언트와 서버 모두가 데이터를 전송할 수 있으며, 이로 인해 양방향 통신이 가능.
3. 양방향 데이터 전송(Bi-Directional Data Transfer)
- 웹소켓 프로토콜은 양방향 데이터 프레임을 정의.
- 클라이언트와 서버는 각각 독립적으로 데이터를 전송할 수 있으며, 이는 풀 듀플렉스 통신을 허용.
- 클라이언트가 서버로 데이터를 전송하고, 서버는 이를 처리한 후 클라이언트에게 응답을 보낼 수 있음.
- 이 과정은 연속적으로 이루어지며, 양방향 통신을 실현.
좋은 자료