프로토콜 조차 다르다
우리가 흔히 사용하는 HTTP
프로토콜을 사용하는 것이 아닌 웹소켓 프로토콜 (ws, wss)을 사용함
- http:// 가 아닌
ws://
나 wss://
의 형태를 갖음
프로토콜 비교
HTTP로는 실시간 통신을 사용할 수 없는 이유 (단방향 통신)
- 클라이언트가 서버에게 데이터를 보내는 것은 가능하지만, 상대방이 내 데이터를 받는 것은 상대방이 특별한 요청이 없는 한 이루어질 수가 없음
- HTTP의
Polling
기법으로 해결가능
- 클라이언트가 주기적으로 서버에 요청을 보내서 상대가 새로운 챗을 보냈는지 확인
- 요청주기에 따라서 실시간으로 받을 수가 없음
- 불필요한 요청
Long Polling
: 서버가 클라이언트 요청에 바로 응답하지 않고 업데이트가 발생할 때까지 기다림
- 상대방이 챗을 보내거나 타임아웃에 걸리면 응답을 보내고 클라이언트는 다시 요청을 보내서 다음 응답을 기다림
- 데이터 업데이트에 반응하는 속도는 빨라지지만 서버의 부담이 커짐 (여러명의 톡방)
- 물론 HTTP/2 이상에서는 양방향 통신이 가능하지만, 장시간의 양방향 통신을 위한 설계는 아님
웹소켓의 과정
핸드쉐이크
- 클라이언트는 서버에게
WebSocket
을 연결하자는 요청을 HTTP
를 통해 보냄
Upgrade
와 Connection: Upgrade
헤더가 포함되어 웹소켓 전환을 요청
- 서버는 그것이 가능한 경우 이를 수락하는 응답을
HTTP
로 보냄
101 Switching Protocols
응답을 보냄
- 핸드쉐이크 과정이 끝나게 되면 클라이언트와 서버는
WebSocket 프로토콜
을 사용하여 소통
데이터 전송