본문 바로가기
프로그래밍/C#_SignalR

[SginalR] SignalR vs Socket.IO

by 뽀도 2023. 3. 16.

기술 블로그 둘러보다가 좋은글을 발견하여 정리하여 공유해봅니다.


 

SignalR과 SocketIO는 둘 다 대기시간이 짧은 이벤트 기반 통신을 지원하는 기술이다.

개발자는 채팅, 실시간 대시보드, 멀티 게임같은 실시간 기능을 만들 수 있다. 

 

 

SinalR이란?

 

 지난 포스팅에 SignalR에 대한 요약 설명을 따로 적었고, 버전별로만 추가 설명을 적겠다.

 

  • ASP.NET SignalR - ASP.NET 개발자를 위한 라이브러리, 오래되었고 심각한 버그만 수정하고 새로운 기능 추가 X 
  • ASP.NET Core SignalR - 오픈소스 SignalR 라이브러리 ASP.NET SignalR과 달리 이 버전은 적극적 유지 관리됨
  • Azure SignalR Service - 클라우드 버전

 

Socket.IO이란?

 

 

웹 클라이언트와 서버간의 짧은 대기 시간, 양방향 통신을 가능하게 하는 오픈소스 실시간 라이브러리

JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현하는 기술

Socket.IO는 WebSocket 프로토콜 위에 구축되었음, 원시 WebSocekt에 비해 추가 기능을 제공

 

  • WebSocket이 지원되지 않는 환경에 대해 HTTP 긴 폴링으로 폴백
  • 연결 끊김, 패킷 버퍼링 및 자동 재연결
  • 네임스페스를 사용한 멀티플렉싱 ([각주:1])
  • 모든 클라이언트 또는 룸을 통해 클라이언트 하위 집합에 브로드 캐스팅

 

장점과 단점

 

장점

  • Socket.IO는 네임스페이스를 통한 다중화를 지원함. 네임스페이스를 사용하면 사용되는 TCP 연결 수를 최소화 하고 서버에 소켓 포트를 저장 할 수 있음
  • Socket.IO를 사용하면 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있음.
    룸 기능을 이용하여 클라이언트 하위 집합에 이벤트를 브로드 캐스트 할 수 있음
  • WebSocket을 지원하지 않는 환경에서 HTTP Long poling을 제공한다. 
  • Socket.IO는 구성가능한 ping/pong 하트비트 메커니즘을 제공하여, 연결이 활성 상태인지 여부를 감지 할 수 있다.
    클라이언트 연결이 끊어지면 자동으로 다시 연결됩니다.
  • Socket.IO는 사용하기가 쉽다. 클라이언트와 서버 모두에 간단한 API를 제공하므로 실시간 기능 구현하는것이 간단함
  • 다양한 솔루션과 통합되어 필요에 가장 적합한 솔루션 선택 가능 (Redis, MongoDB, Postgres, AMQP/RabbitMQ등)

 

단점

  • WebSocket 구현과 호환되지 않음, 일반 WebSocket 클라이언트를 Socket.IO 서버와 함께 사용할 수 없습니다. 
  • 제한된 기본 보안 기능을 제공합니다. 예를 들어 종단 간 암호화를 제공하지 않으며 인증을 위한 토큰을 생성 및 갱신하는 메커니즘을 제공하지 않습니다. 

 

 

SignalR 과 Socket.IO 비교

 

유사한점

 

1. SignalR과 SocketIO가 주로 웹 소켓을 통해 클라이언트와 서버간 실시간 양방향 통신 채널을 가능하게 하는 기술 

원시 소켓과 비교하여 SignalR 및 Socket.IO는 자동 재연결 및 HTTP long poling으로 대체와 같은 추가 기능 제공

 

2. 메시징 패턴 부분에서 유연성 제공 

  •    1:1 메시징, 1:다 브로드 캐스트 사용 가능 

3. 둘 다 오픈 소스 솔루션

 

 

차이점

 

1. SignalR은 Server-Sent-Events도 지원, SocketIO는 지원 안함 

2. Socket.IO는 간단하고 사용하기 쉬운 API를 제공, SignalR은 이보다 좀 더 복잡합니다. 

대신 SignalR은 서버측에 보다 기능이 풍부한 API를 제공하여 허브 및 스트리밍과 같은 기능을 제공합니다. 

 

3. .NET 개발자라면 SignalR이 확실한 선택 ,  Node.js 개발자라면 Socket.IO가 더 나은 선택 

 

 

 

참고

 

  1. 네임스페이스 : 소켓을 묶어주는 단위라고 생각하면 편함. [본문으로]
반응형

'프로그래밍 > C#_SignalR' 카테고리의 다른 글

[SignalR] SignalR 설명  (0) 2023.03.15

댓글