Socket.IO

1 분 소요

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과 같은 트릭을 사용하여 statelessHTTP에서 위와 같은 서비스를 구현했지만, 추가적이고 불피요한 자원을 지속적으로 사용하게 한다.

“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