.NET WebSocket 라이브러리 — 비교 가이드
2026년 .NET 개발자가 선택할 수 있는 WebSocket 라이브러리를 출처와 함께 중립적으로 살펴봐요: sgcWebSockets .NET, System.Net.WebSockets, ASP.NET Core SignalR, WebSocket-Sharp, Fleck, Watson WebSocket. 모든 기능 주장은 해당 프로젝트의 공식 문서로 연결돼요.
2026년 .NET 개발자가 선택할 수 있는 WebSocket 라이브러리를 출처와 함께 중립적으로 살펴봐요: sgcWebSockets .NET, System.Net.WebSockets, ASP.NET Core SignalR, WebSocket-Sharp, Fleck, Watson WebSocket. 모든 기능 주장은 해당 프로젝트의 공식 문서로 연결돼요.
각 라이브러리에 대한 한 문단 요약과 공식 문서 또는 저장소 링크.
eSeGeCe · 상용
Delphi 제품을 미러링하는 C# 컴포넌트 모음. 동일한 Tsgc* 클래스 이름, 동일한 프로토콜 범위: WebSocket 클라이언트 및 서버(TCP 및 HTTP.SYS), MQTT, AMQP, STOMP, WAMP, HTTP/2, OAuth2, JWT, AI/LLM 클라이언트(OpenAI, Anthropic, Gemini, DeepSeek, Grok, Ollama, Mistral, MCP), WebRTC 서버, 30개 이상의 암호화폐 거래소 및 SaaS API 통합. .NET Framework 2.0–4.8.1, .NET Core 1.0–3.1, .NET 5/6/7/8/9, .NET Standard 1.6/2.0을 대상으로 해요.
Microsoft · MIT (.NET 일부)
.NET에 내장된 저수준 WebSocket API. 클라이언트용 ClientWebSocket과 ASP.NET Core, Kestrel, HttpListener에서 사용하는 추상 서버 WebSocket 클래스를 제공해요. RFC 6455 프레이밍과 per-message-deflate(WebSocketDeflateOptions)가 기본 지원돼요.
Microsoft · MIT (ASP.NET Core 일부)
Microsoft의 고수준 실시간 프레임워크. WebSocket, Server-Sent Events, Long Polling(이 순서대로 폴백) 위에 구축되었으며 원시 프레임이 아닌 허브 RPC API를 제공해요. JSON 또는 MessagePack 허브 프로토콜. Azure SignalR Service 또는 Redis 백플레인을 통해 확장돼요.
sta.blockhead · MIT
오랫동안 운영된 오픈 소스 C# WebSocket 클라이언트 및 서버. .NET Framework 3.5 이상(및 Mono)을 대상으로 하며 컨텍스트 인계 없이 per-message-deflate를 포함한 RFC 6455를 구현해요. GitHub 저장소에는 태그가 지정된 릴리스가 없어 사용자는 보통 최신 master를 가져오거나 커밋 해시에 고정해요.
Jason Staten / 커뮤니티 · MIT
HttpListener나 HTTP.SYS에 의존하지 않는 서버 전용 C# WebSocket 라이브러리 — 원시 소켓에서 수신 대기해요. 클라이언트 측, HTTP 서버, X509 인증서 경로 외부의 내장 TLS 종료가 없어요. 가장 최근 태그 릴리스는 2016년 10월의 0.14.0이에요.
Joel Christner · MIT
이벤트 기반 API를 갖춘 비동기 C# WebSocket 클라이언트 및 서버. .NET Framework 4.8과 .NET 7.0을 대상으로 해요. 저장소는 Watson Webserver에 통합되었다는 메모와 함께 2024년 5월에 보관 처리됐어요.
체크()는 프로젝트가 네이티브 지원을 문서화함을 의미해요. 대시(—)는 프로젝트가 네이티브로 제공하지 않음을 의미해요. 물결표(~)는 부분적 / 애드온 경유 / 명시적으로 문서화되지 않음을 의미해요 — 검증할 수 있었던 내용은 출처 섹션을 참고하세요.
| 기능 | sgcWebSockets .NET | System.Net.WebSockets | ASP.NET Core SignalR | WebSocket-Sharp | Fleck | Watson WebSocket |
|---|---|---|---|---|---|---|
| WebSocket 클라이언트 RFC 6455 클라이언트 | — | |||||
| WebSocket 서버 RFC 6455 서버 | ||||||
| TLS 1.3 제공된 전송에서 TLS 1.3 지원 | ~ | ~ | ||||
| HTTP/2 클라이언트 네이티브 HTTP/2 클라이언트 (RFC 7540 / 9113) | ~ | — | — | — | — | |
| MQTT MQTT 3.1.1 / 5.0 클라이언트 내장 | — | — | — | — | — | |
| AMQP AMQP 0.9.1 / 1.0 클라이언트 내장 | — | — | — | — | — | |
| STOMP STOMP 1.0 / 1.2 클라이언트 내장 | — | — | — | — | — | |
| WAMP WAMP v1 / v2 클라이언트 내장 | — | — | — | — | — | |
| 서버 푸시 / 스트리밍 장시간 푸시 또는 스트리밍 연결 | ||||||
| 자동 재연결 내장 클라이언트 자동 재연결 / WatchDog | — | — | — | — | ||
| per-message-deflate (RFC 7692) WebSocket 압축 확장 | ~ | — | ~ | |||
| 멀티 플랫폼 Windows / macOS / Linux / iOS / Android | ~ | |||||
| 상용 사용 허용 라이선스가 폐쇄형 상용 사용을 허용 | ||||||
| 소스 코드 사용 가능 라이브러리 소스를 개발자가 볼 수 있음 | ||||||
| 활발한 유지보수 지난 12–18개월 동안 릴리스 또는 태그 활동 | ~ | — | — | |||
| 라이선스 모델 라이선스 유형 | 상용 | MIT (.NET 일부) | MIT (ASP.NET Core 일부) | MIT | MIT | MIT |
여기 있는 모든 라이브러리에는 실제 사용자가 있어요. 올바른 선택은 런타임 대상, 프로토콜 범위, 그리고 RPC 스타일 허브 API를 원하는지 원시 WebSocket 프레임을 원하는지에 달려 있어요.
WebSocket과 함께 MQTT, AMQP, STOMP, WAMP, HTTP/2, AI/LLM 클라이언트를 하나의 패키지로 필요로 할 때, 새 라이브러리들이 지원을 끊은 오래된 런타임(.NET Framework 2.0+, .NET Core 1.0)을 대상으로 할 때, Delphi와 .NET 프로젝트에서 동일한 API 표면을 원할 때, 특히 .NET에서 WebRTC 서버 부분(시그널링, ICE, TURN)이 필요할 때 sgcWebSockets .NET을 선택하세요.
이미 호스팅에 ASP.NET Core / Kestrel을 사용하고 추가 의존성을 원하지 않을 때, 종단 간으로 제어하는 저수준 API를 원할 때, WebSocket만이 필요한 프로토콜일 때, 또는 원시 프레임 위에 자체 프로토콜을 구축할 때 System.Net.WebSockets를 선택하세요.
서버와 클라이언트 모두 .NET일 때(또는 JavaScript / Java / Python SignalR 클라이언트를 사용할 때), 원시 WebSocket 프레임보다 RPC 프로그래밍 모델(허브와 메서드)을 선호할 때, 제한된 네트워크용 SSE / Long Polling 자동 폴백이 필요할 때, 또는 Azure SignalR Service에서 확장할 계획일 때 SignalR을 선택하세요.
.NET Framework 3.5 / Mono 대상에서 실행되는 관대한 라이선스(MIT)의 WebSocket 클라이언트 및 서버가 필요하고, 커밋 해시에 고정해 소스를 빌드에 벤더링하는 데 만족할 때 WebSocket-Sharp를 선택하세요.
HTTP.SYS를 요구하지 않고 레거시 Windows 서버(7 / 2008)에서 실행되며 자체 TLS 인증서를 제공하는 작고 MIT 라이선스인 WebSocket 서버가 필요할 때 Fleck을 선택하세요. 임베디드 시나리오와 소규모 서비스에 적합해요.
이미 Joel Christner의 Watson Webserver / Watson TCP 제품군을 사용하고 있고 일치하는 API 스타일을 유지하려면 Watson WebSocket을 선택하세요. 새 프로젝트는 Watson Webserver(활발한 후속작) 또는 이 페이지의 다른 라이브러리를 고려해야 해요.
위 라이브러리 중 하나에서 전환할 때 API 및 기능 차이에 대한 간단한 메모. 적대적이지 않은 — 실용적인 매핑일 뿐이에요.
System.Net.WebSockets는 와이어 프로토콜을 제공해요. sgcWebSockets .NET은 그 위에 MQTT / AMQP / STOMP / WAMP 하위 프로토콜, HTTP/2, 자동 재연결, WatchDog, AI/LLM 및 거래소 API 클라이언트, WebRTC 서버 부분을 추가해요. ClientWebSocket 주위에 얇은 래퍼를 작성했다면 마이그레이션은 대부분 이름 변경과 이벤트 핸들러 이식이에요.
SignalR은 WebSocket 위에서 자체 프레이밍 프로토콜을 구사해요. sgcWebSockets는 SignalR 클라이언트 와이어 프로토콜(TsgcWSAPI_SignalR 및 TsgcWSAPI_SignalRCore)을 구현하므로 sgcWebSockets로 빌드한 Delphi 또는 .NET 클라이언트는 기존 ASP.NET Core SignalR 서버와 통신할 수 있어요. 전체 SignalR 백엔드를 원시 WebSocket으로 마이그레이션한다면 허브 메서드 디스패치를 자체 메시지 봉투로 재설계해야 해요.
WebSocket-Sharp의 WebSocket 클라이언트와 WebSocketServer는 sgcWebSockets의 TsgcWebSocketClient와 TsgcWebSocketServer에 매우 가깝게 매핑돼요. 이벤트 이름은 다르지만(OnMessage는 둘 다에 있고, OnError와 OnClose는 유사한 시그니처를 가져요). 하위 프로토콜(MQTT / AMQP / STOMP / WAMP)은 sgcWebSockets 전용이에요.
Fleck은 서버 전용이에요. 애플리케이션에 Fleck 서버와 별도의 클라이언트 라이브러리가 모두 있다면 sgcWebSockets .NET이 둘 다 통합해요. Fleck의 핸들러 기반 API(WebSocketServer.Start(socket => ...))는 OnMessage / OnConnect 핸들러를 사용하는 sgcWebSockets의 이벤트 기반 TsgcWebSocketServer에 매핑돼요.
Watson 클라이언트/서버 이벤트 표면(MessageReceived, ClientConnected, ClientDisconnected)은 sgcWebSockets의 OnMessage / OnConnect / OnDisconnect에 깔끔하게 매핑돼요. 하위 프로토콜과 AI/LLM API 클라이언트는 sgcWebSockets 전용이에요.
위 매트릭스의 각 셀은 이 공식 문서 페이지, 저장소, 또는 릴리스 노트 중 하나로 거슬러 올라가요. 작성 시점에 모든 URL은 HEAD 체크되었어요.