Hamutaro - Hamtaro 4

Web

[Web] 양방향 통신 : Polling, Websocket

carsumin 2024. 7. 23. 22:23

 

https://www.pubnub.com/blog/evaluating-long-polling-vs-websockets/

 

Evaluating Long Polling vs WebSockets

Explore Long Polling vs WebSockets in real-time web development.

www.pubnub.com

 

Polling과 WebSocket

 

1. client - server 통신

- 폴링과 웹소켓은 client - server 간의 실시간 양방향 통신에 사용되는 기술

 

2. 실시간성

- 실시간 데이터를 처리하기 위해 사용함

 

3. HTTP 기반

- Polling은 HTTP의 요청/응답 반복

- WebSocket은 초기 핸드셰이크(Handshake) 과정에서 HTTP 사용

 

* 초기 핸드셰이크(Handshake) 과정

1. client의 요청
- client는 server에 WebSocket 연결을 요청하기 위해 헤더가 포함된 HTTP 요청을 보냄
GET /chat HTTP/1.1

Host: server.example.com

Upgrade: websocket
-> client가 WebSocket 프로토콜로 업그레이드 하길 원함

Connection: Upgrade
-> 연결을 업그레이드 한다

Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
-> client가 server에 보낼 임의의 key

Sec-WebSocket-Version: 13
-> client가 지원하는 WebSocket 프로토콜 버전


2. server의 응답
- server는 client의 요청을 받고 연결을 허용할지 여부를 결정
- 연결 허용하려면 위에서 client가 보낸 key 기반으로 응답 생성

HTTP/1.1 101 Switching Protocols

Upgrade: websocket
-> client의 업그레이드 요청 받아들임

Connection: Upgrade
-> 연결 업그레이드 승인

Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
-> client가 보낸 key 기반으로 생성된 응답키

3. 프로토콜 전환
- server가 101 Switching Protocols 응답 코드를 보내면 HTTP에서 WebSocket 연결로 업그레이드 됨

 

Polling

 

 

- client가 일정한 주기로 server에 HTTP 요청을 보내면 server에서 최신 데이터를 응답

- server에 변화가 없어도 client는 계속 요청을 보냄 => 불필요한 네트워크 트래픽 발생

- 주기적으로 데이터를 요청하기 때문에 실시간성이 떨어짐

- 각 요청이 독립적이며 요청마다 새로운 연결이 이루어짐 (HTTP의 stateless)

 

WebSocket

 

 

- client와 server의 지속적인 연결 유지 => 네트워크 트래픽 감소

- 초기에 연결이 완료된 상태에서 계속 데이터를 주고 받을 수 있음

- 실시간성이 높은 양방향 통신

- 대규모 실시간 통신이 필요할 때 적합한 방식

'Web' 카테고리의 다른 글

[Web] HTTP 상태 코드  (0) 2024.12.01
[Web] HTTP 메서드  (0) 2024.12.01
[Web] RESTful API 설계 원칙  (0) 2024.10.10
[Web] 세션(Session)과 쿠키(Cookie)  (0) 2024.07.30
[Web] RESTful API란?  (1) 2022.10.14