Websocket?
- 지속적인 단일 소켓 연결을 통해 클라이언트와 서버 간의 양방향 전이중 통신을 가능하게 하는 실시간 전송 라이브러리
- 연결
- HTTP 요청/응답 핸드셰이크로 시작
- 장점
- 모든 요청에 대한 새로운 연결의 필요성을 제거하여, 메시지의 크기를 대폭 감소 ( HTTP 헤더 없음 ) 하여 대역폭을 절약하고 대기 시간을 개선하여 서버 측에서 부담을 덜 수 있음
- 유연성이 내재되어 있어 추가 기능 (예: 게시 / 구독메시징) 을 위한 어플리케이션 수준 프로토콜 및 확장이 구현 가능
- 이벤트 기반 기술로 클라이언트가 요청하지 않고도 데이터를 전송할 수 있음.
- 단점
- HTTP와 달리 stateful로, 서버 계층에서 각각의 개별 연결을 추적하고 상태 정보를 유지 관리해야 하므로 대규모로 처리하기 까다로움
- 연결이 종료될 경우 자동으로 복구되지 않아, 해당 로직을 직접 구현해야 함.
- 특정 환경 (예: 프록시 서버가 있는 회사 네트워크) 은 websocket연결을 차단하고, 일부 브라우저에서 지원하지 않음.
Socket.io?
- Client와 Server 간의 실시간 양방향 이벤트 기반 통신을 가능하게 하는 전송 라이브러리
- WebSocket 프로토콜 기반
- 장점
- 네임스페이스를 통한 다중화를 지원하여, 사용되는 TCP 연결 수를 최소화하고 서버에 소켓 포트를 저장할 수 있음
- 서버측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드 캐스트 할 수 있음.
- WebSocket을 지원하지 않는 환경에서 유용한 대체 옵션으로 사용되며, HTTP Long Polling을 제공
- 구성 가능한 Ping/Pong 하트비트 메커니즘을 제공하여 연결이 활성상태인지 여부를 감지할 수 있으며, 클라이언트 연결이 끊어지면 자동으로 다시 연결
- 단점
- 긴 폴링 전송이 사용될 때 메세지 순서 보장을 제공하지 않음
- 제한된 기본 보안기능을 제공 (예: 종단 간 암호화를 제공하지 않으며, 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않음)
- 다른 Websocket과 호환되지 않음.
- 다중 지역 아키텍처가 아닌 단일 지역에서 작동하도록 설계되어, 이로 인해 대기시간증가 및 시스템 가동중지 시간과같은 문제가 발생할 수 있음.
사용사례
- 실시간 업데이트가 이루어지는 서버 -> 클라이언트 단방향 통신 (예: 알림, 실시간 대시보드, 위치추적 등 )
- 클라이언트와 서버가 모두 메시지를 보내고 받는 양방향통신 ( 예: 채팅, 가상 이벤트 및 가상 교실, 다중 사용자 동기화 협업 등)
차이점
- Websocket은 클라이언트와 서버 간의 양방향 실시간 통신을 가능하게 하는 기술이고, Socket.IO는 WebSockets 위에 추상화 계층을 제공하는 라이브러리로 실시간 어플리케이션을 더 쉽게 만들 수 있음
- Websocket은 Socket.IO보다 성능면에서 우위에 있음.
- WebSocket은 Socket.IO에 비해 메모리 요구사항이 낮음
- Socket.IO는 Websocket보다 복잡하고 까다로운 솔루션
- Socket.IO는 자동 재연결, 룸, 긴 폴링을 지원함