Web Socket
웹 소켓이 나온 이유는 특징과 연관이 된다.
실시간 네트워킹을 하면서 양방향 통신을 하는 것을 뜻함.
서버로 일정 주기 요청 송신
real-time 통신에서는 언제 통신이 발생할지 예측이 불가능
불필요한 request와 connection을 생성
real-time 통신이라 부르기 애매할 정도의 실시간성
많은 양의 메시지가 쏟아지면 polling과 같아진다
결과적으로 이 모든 방법들이 HTTP를 통해 통신하기 때문에 Request, Response 둘다 Header가 불필요하게 큼
빨간색 박스
노란색 박스
보라색 박스
Opening Handshake와 Closing Handshake는 일반적인 HTTP TCP 통신의 과정 중 하나이다.
접속 요청은 HTTP로 한 뒤, Web Socket 프로토콜로 변경된다. (WS)
Web Socket 프로토콜로 변경되기 위한 HTTP 헤더는 아래처럼 구성되어 있다.
ws://localhost:8080/chat
로 접속하려고 한다고 가정한다.
Request Header
GET /chat HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://localhost:9000
GET /chat HTTP/1.1
Web Socket의 통신 요청에서
Upgrade
Connection
Sec-WebSocket-Key
Sec-WebSocket-Protocol
Sec-WebSocket-Version
Origin
Response Header
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols
Sec-WebSocket-Accept
Opening HandShake에서 승인이 나고나면, 웹소켓 프로토콜로 노란색 박스 부분인 Data transfer이 진행된다. 여기서 데이터는 메시지라는 단위로 전달된다.
메시지
여러 프레임(frame)이 모여서 구성되는 하나의 논리적인 메시지 단위
프레임
통신에서 가작 작은 단위의 데이터
웹소켓은 HTML5의 기술이기 때문에 오래된 버전의 웹 브라우저는 웹 소켓을 지원하지 않는다.
이를 해결하기 위해 나온 기술 중 하나가 Socket.io이다.