Socket.IO
Introduction
알아볼 주제는 Socket.IO
다. Socket.IO
스펙과 내부 구현체에 대해 정리해보려한다.
Socket.IO
Socket.IO is a library that enables real-time, bidirectional and event-based communication between the browser and the server.
이전에 웹소켓을 다루면서 잠깐 자료를 찾긴 했는데 자세히 파보지는 않았던 것 같다.
해당 구현체는 Engine.IO
프로토콜을 기반으로 하고 있으며, WebSocket
이 지원되지 않는다면 HTTP polling
을 이용해 통신할 수 있다.
Socket.IO
구현체는 서로 다른 두 개의 레이어로 정의되는데,
- 엔진 아이오를 통한 로우레벨 핸들링
- 소켓아이오를 통한 어플리케이션 단 핸들링
WebSocket
The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code
— RFC 6455 - The WebSocket Protocol
본론부터 말하자면, 웹소켓은 양방향 전이중 통신을 지원하는 프로토콜이다. HTTP 프로토콜 위에서 TCP/IP
소켓 커넥션을 통해 동작한다. 웹소켓은 실시간으로 사용자와 서버가 정보를 주고받을 경우(대표적으론 실시간 시스템이 있겠다.) HTTP
보다 나은 선택이 될 수 있다.
웹소켓이 없던 시절, 실시간 서비스를 위해 HTTP
기반을 어떻게 응용했을까?
HTTP
의 경우 사용자가 요청하지 않는다면 서버는 사용자에게 어떠한 데이터도 보낼 수 없다. 이러한 문제를 해결하기 위해 개발자들은 Long-polling
혹은 Comet
과 같은 트릭을 사용하여 stateless
한 HTTP
에서 위와 같은 서비스를 구현했지만, 추가적이고 불피요한 자원을 지속적으로 사용하게 한다.
“contain lots of additional, unnecessary header data and introduce latency” and resulted in “an outrageously high price tag”
ㅡ HTML5 Web Socket in Essence - Wayne Ye
Refernce
- https://www.codeproject.com/Articles/209041/HTML5-Web-Socket-in-Essence#Introduction
- https://tools.ietf.org/html/rfc6455
- https://sookocheff.com/post/networking/how-do-websockets-work/
- By Vanessa Wang, Frank Salim, and Peter Moskovits, The Definitive Guide to HTML5 WebSocket, 2013