클라이언트
와 서버
가 서로에게 원할 때 데이터를 주고 받을 수 있다.웹 소켓도
HandShaking
이 필요하며,Socket
프로토콜이 아니라HTTP
orHTTPS
프로톨로 이루어진다.
HTTP
버전 = 1.1 이상.GET
Method.Upgade
정보는 서버
, 전송
, 프로토콜
연결에서 다른 프로토콜로 Upgrade
or Update
하기 위한 규칙.Sec-WebSocket-Key
는 클라이언트가 요청하는 서브 프로토콜을 의미.101 Switching Protocols
가 Response
로 오면 웹소켓
이 연결된 것이다.
Sec-WebSocket-Accept
는 요청에서의 Key
값을 계산한 값으로 신원 인증에 필요한 데이터이다.HandShake
가 완료되면 프로토콜이 ws
로 변경된다.wss
와 같이 데이터 보안을 위하여 SSL
을 적용한 프로토콜로 변경된다.Frame
이 모여서 구서하는 하나의 논리적 메시지 단위Communication
에서 가장 작은 단위의 데이터, 작은 헤더 + Payload로 구성WebSocket
통신에 사용되는 데이터 : UTF8 인코딩0x00 → 보낼 데이터 → 0xff
구성으로 진행HTTP
프로토콜 위에서 HandShaking
을 하기 때문에 HTTP Header
를 사용한다.Text & Binary
뿐이다.Socket.io
, SockJS
와 같은 HTML5 이전의 기술로 구현된 서비스에서 웹 소켓처럼 사용할 수 있도록 도와주는 기술이다. 그래서 JS를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있고 WebSocket
, FlashSocket
, AJAX Long Polling
등등을 하나의 API로 추상화한 것이다.즉, 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택해서 사용하는 방식이다.
WebSocket
은 문자열들만 주고 받을 수 있고 그 외는 X 주고 받은 문자열의 해독은 오로지 앱에 맡긴다. HTTP
는 형식을 정해두어 모두가 약속을 따르기만 하면 해석 할 수 있어도 WebSocket
은 형식이 정해져 있지 않아 앱에서 쉽게 해석이 힘들다. 그래서 WebSocket
방식은 sub-protocols
를 사용하여 주고 받는 메시지의 형태를 약속하는 경우가 많다. sub-protocol
로 자주 사용하는 것은 STOMO
다.