HTTP는 실시간으로 통신하는 것에 한계를 느낄 수 있는 프로토콜이다. 그래서 사람들은 한번의 TCP 연결을 한 이후에 실시간으로 통신을 하도록 새로운 프로토콜을 정의하였다. 바로 WebSocket이다.
WebSocket은 하나의 TCP 연결을 가지고 양방향 통신을 지원하는 프로토콜이다. HTML5 웹 표준 기술로 실시간을 지원하기 위해 나온 프로토콜인 만큼 빠르다. 이벤트를 단순히 듣고, 보내는 것만 가능하다.
서버에서 클라이언트로 푸시알림을 보내고 싶을 수가 있다. 이때 WebSocket을 이용할 수도 있지만 양방향 통신이 필요한 것이 아니기에 단방향 통신 방식을 생각해볼 수 있다. Server Sent Event (이하 SSE)가 단방향 통신이다.
HTML5 웹 표준 기술이며, HTTP를 그대로 이용한 방식이다. 다만 브라우저에 연결 개수 제한(6개)이 있어 탭을 여러개 띄우거나 하면 동작을 안할 수도 있다.
WebSocket | SSE | |
---|---|---|
브라우저 지원 | 대부분 브라우저 | 대부분 모던 브라우저 |
통신 방향 | 양방향 | 단방향 |
실시간 통신 | O | O |
데이터 형태 | Binary, UTF-8 | UTF-8 |
자동 재접속 | X | O (3초마다 재시도) |
최대 동시 접속 수 | 브라우저 연결 한도는 없지만 서버 셋업에 따라 다름 | HTTP를 통해서 할 때는 브라우저당 6개 까지 가능 / HTTP2로는 100개가 기본 |
프로토콜 | websocket | HTTP |
전력 소모량 | 큼 | 작음 |
Firewall 친화적 | X | O |
https://www.peterkimzz.com/websocket-vs-socket-io/
https://blog.logrocket.com/server-sent-events-vs-websockets/
https://surviveasdev.tistory.com/entry/%EC%9B%B9%EC%86%8C%EC%BC%93-%EA%B3%BC-SSEServer-Sent-Event-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
좋은 글 잘 읽고 갑니다.