.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) について、一次情報源を引用した中立的な比較調査です。すべての機能記述は各プロジェクトの公式ドキュメントへリンクしています。
各ライブラリの 1 段落の要約と、公式ドキュメントまたはリポジトリへのリンクです。
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) を対象とし、RFC 6455 を per-message-deflate (コンテキストテイクオーバーなし) で実装します。GitHub リポジトリにはタグ付きリリースがなく、利用者は通常最新の master を取得するか、コミットハッシュにピン留めします。
Jason Staten / コミュニティ · MIT
サーバー専用の C# WebSocket ライブラリで、HttpListener や HTTP.SYS に依存せず、生のソケットでリッスンします。クライアント側、HTTP サーバー、X509 証明書経路以外の組み込み TLS 終端は提供しません。最新のタグ付きリリースは 2016 年 10 月の 0.14.0 です。
Joel Christner · MIT
イベント駆動 API を持つ非同期 C# WebSocket クライアントおよびサーバーです。対象は .NET Framework 4.8 および .NET 7.0。リポジトリは 2024 年 5 月に Watson Webserver に統合された旨の注記とともにアーカイブされました。
チェック () はプロジェクトがネイティブサポートをドキュメント化していることを示します。ダッシュ (—) はネイティブでは提供されていないことを示します。チルダ (~) は部分的 / アドオン経由 / 明示的にドキュメント化されていないことを示します。検証可能だった内容は「ソース」セクションをご参照ください。
| 機能 | 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 クライアントを内蔵 | — | — | — | — | — | |
| サーバープッシュ / ストリーミング 長時間維持されるプッシュまたはストリーミング接続 | ||||||
| 自動再接続 クライアントに自動再接続 / ウォッチドッグを内蔵 | — | — | — | — | ||
| per-message-deflate (RFC 7692) WebSocket 圧縮拡張 | ~ | — | ~ | |||
| マルチプラットフォーム Win / macOS / Linux / iOS / Android | ~ | |||||
| 商用利用可 クローズドソースの商用利用をライセンスが許可 | ||||||
| ソースコード利用可能 開発者がライブラリのソースを参照可能 | ||||||
| 活発な保守 直近 12–18 か月にリリースまたはタグ付き活動あり | ~ | — | — | |||
| ライセンスモデル ライセンス種別 | 商用 | MIT (part of .NET) | MIT (part of ASP.NET Core) | MIT | MIT | MIT |
ここに挙げたライブラリにはいずれも実需要があります。最適な選択は、対象とするランタイム、必要なプロトコルの広さ、そして RPC スタイルのハブ API と生の WebSocket フレームのどちらを求めるかによります。
WebSocket に加えて MQTT、AMQP、STOMP、WAMP、HTTP/2、AI/LLM クライアントを 1 つのパッケージで必要とする場合、新しいライブラリが切り捨てた古いランタイム (.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、自動再接続、ウォッチドッグ、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 チェック済みです。