기본적인 아이디어로 클라이언트가 반복적으로 Poll을 서버로 날린다.
클라이언트가 Req를 요청 하고 서버가 Res 하기를 기다립니다.
만약 데이터가 없다면 빈 Res를 반환합니다.
Polling의 문제로는 클라이언트가 지속적으로 서버에 새 데이터를 요청 해야한다는 것이다.
결과적으로 많은 빈 Res가 HTTP의 오버헤드를 일으킵니다.
HTTP 3-way-handshake의 문제점
위의 Polling의 문제점을 보완하기 위해 나왔다.
클라이언트가 서버의 Res가 TimeOut 될때 까지 기다렸다가 다시 Req을 한다.
결국 비슷하고 똑같이 오버헤드가 일어난다.
http 통신 후 WebSocket handshake를 통해 전이중 통신을 제공한다.
서버에서 클라로 데이터를 전송할 때 사용한다.
Socket | SSE | |
---|---|---|
통신 | 양방향 | 일방향 |
실시간 | yes | yes |
데이터형태 | Binary,UTF-8 | UTF-8 |
최대동시접속 | 서버에 따라 | HTTP1.1 브라우저당 최대 6개 / HTTP2.0 기본 100개 |
프로토콜 | WebSocket | HTTP |
베터리소모량 | 큼 | 적음 |
방화벽 친화적 | No | YES |
접속되어 있는 유저에게 간단한 푸시를 줘야한다면
SSE를 사용하자.
페이스북 피드, 노티
내 생각엔 타겟 광고에 쓰이면 어떨가 싶다.
https://codeburst.io/polling-vs-sse-vs-websocket-how-to-choose-the-right-one-1859e4e13bd9
https://developer.ibm.com/articles/wa-http-server-push-with-websocket-sse/