비슷하면서 다른 WebSocket과 Socket.io이다. 꾸준히 수요가 있는 채팅쪽과 최근 핫한 가상화폐 거래소에서 주로 필요로 하는, 실시간 통신에 사용하는 두 기술의 차이를 확실히 정리가 필요할 것 같다.
WebSocket 은 사용자의 브라우저와 서버 사이의 동적인 양방향 연결 채널을 구성하는 HTML5 프로토콜이다. HTML5 웹 표준 기술로 WebSocket API를 사용한다. 속도가 매우 빠르며, 크기가 작은 데이터 통신에 적합하다. 다른 기능 없이 단순히 listen과 send에 초점이 맞춰져있다.
WebSocket은 다른 HTTP 요청과 마찬가지로 80번 포트를 통해 웹 서버에 연결하고, 요청 헤더에서 Upgrade를 사용항 웹 서버에 요청한다.
Upgrade: websocket
하지만 WebSocket은 브라우저별로 지원하는 WebSocket의 버전이 다르며 오래된 브라우저의 경우 아예 지원하지 않는 경우도 있다. 따라서 등장을 한 것이 Socket.io 이다.
Socket.io는 node.js 기반으로 만들어진 Javascript 실시간 웹 애플리케이션을 지원하는 라이브러리이다. WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling 등 현존하는 대부분의 실시간 웹 기술들이 추상화 되어있다. Socket.io는 Javascript로 만들어져있기 때문에 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있는 Cross-platform WebSocket API이다.
Socket.io는 fallback을 통해 소켓 연결에 실패를 하면 재 연결을 시도할 수 있고, 연결된 모든 클라이언트에게 필요시 broadcast 하는 등 여러 기능들을 지원한다.
WebSocket과 Socket.io는 사용 시 요청 개수에 따라 네트워크 트래픽에도 차이를 보인다.
WebSocket
Socket.io
reference:
https://ichi.pro/ko/websocketgwa-socket-ioui-chaijeom-186805209650140
http://daplus.net/node-js-socket-io%EC%99%80-%EC%9B%B9-%EC%86%8C%EC%BC%93%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/
해당 네트워크 트래픽 테스트에서는 WebSocket과 Socket.io 요청 시 0.2초의 차이를 보였다고 한다.
두 기술의 사용은 case by case로 나뉘겠지만, 웬만한 실시간 웹에서는 모든 브라우저를 지원하고, 다양한 기능을 제공하는 Socket.io의 사용이 용이하겠다. 하지만 가상화폐 거래소의 경우에는 실시간으로 정보가 엄청 빠르게 바뀌고, 이동하는 데이터의 양이 많기 때문에 WebSocket의 사용이 적합할 것 같다.