.NET WebSocket ライブラリ — 比較ガイド

2026 年時点で .NET 開発者が利用可能な WebSocket ライブラリ (sgcWebSockets .NET、System.Net.WebSockets、ASP.NET Core SignalR、WebSocket-Sharp、Fleck、Watson WebSocket) について、一次情報源を引用した中立的な比較調査です。すべての機能記述は各プロジェクトの公式ドキュメントへリンクしています。

選択肢となる 6 つのライブラリ

各ライブラリの 1 段落の要約と、公式ドキュメントまたはリポジトリへのリンクです。

System.Net.WebSockets

Microsoft · MIT (.NET の一部)

.NET 自体に組み込まれている低レベル WebSocket API です。クライアント用に ClientWebSocket を、ASP.NET Core、Kestrel、HttpListener が消費するサーバー側の抽象 WebSocket クラスを提供します。RFC 6455 のフレーミングと per-message-deflate (WebSocketDeflateOptions) を第一級の機能としてサポートします。

公式ページ

ASP.NET Core SignalR

Microsoft · MIT (ASP.NET Core の一部)

Microsoft の高レベルリアルタイムフレームワークです。WebSocket、Server-Sent Events、Long Polling (この順でフォールバック) 上に構築され、生のフレームではなく ハブ RPC API を公開します。ハブプロトコルは JSON または MessagePack に対応し、Azure SignalR Service または Redis バックプレーンでスケールします。

公式ページ

WebSocket-Sharp

sta.blockhead · MIT

長年にわたり開発されてきたオープンソースの C# WebSocket クライアントおよびサーバーです。.NET Framework 3.5 以降 (および Mono) を対象とし、RFC 6455 を per-message-deflate (コンテキストテイクオーバーなし) で実装します。GitHub リポジトリにはタグ付きリリースがなく、利用者は通常最新の master を取得するか、コミットハッシュにピン留めします。

公式ページ

Fleck

Jason Staten / コミュニティ · MIT

サーバー専用の C# WebSocket ライブラリで、HttpListener や HTTP.SYS に依存せず、生のソケットでリッスンします。クライアント側、HTTP サーバー、X509 証明書経路以外の組み込み TLS 終端は提供しません。最新のタグ付きリリースは 2016 年 10 月の 0.14.0 です。

公式ページ

Watson WebSocket

Joel Christner · MIT

イベント駆動 API を持つ非同期 C# WebSocket クライアントおよびサーバーです。対象は .NET Framework 4.8 および .NET 7.0。リポジトリは 2024 年 5 月に Watson Webserver に統合された旨の注記とともにアーカイブされました。

公式ページ

機能の横並び比較

チェック () はプロジェクトがネイティブサポートをドキュメント化していることを示します。ダッシュ () はネイティブでは提供されていないことを示します。チルダ (~) は部分的 / アドオン経由 / 明示的にドキュメント化されていないことを示します。検証可能だった内容は「ソース」セクションをご参照ください。

プロトコル、トランスポート、ライセンス

16 行
機能 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 フレームのどちらを求めるかによります。

sgcWebSockets .NET を選ぶ場合

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 を選んでください。

System.Net.WebSockets を選ぶ場合

ホスティングに既に ASP.NET Core / Kestrel を使用しており追加依存をゼロにしたい場合、エンドツーエンドで自分が制御する低レベル API が必要な場合、必要なプロトコルが WebSocket のみの場合、または生のフレームの上に独自プロトコルを構築する場合に、System.Net.WebSockets を選んでください。

ASP.NET Core SignalR を選ぶ場合

サーバーとクライアントの両方が .NET である (または JavaScript / Java / Python の SignalR クライアントを使用する) 場合、生の WebSocket フレームよりも RPC プログラミングモデル (ハブとメソッド) を好む場合、制限されたネットワーク向けに SSE / Long Polling への自動フォールバックが必要な場合、または Azure SignalR Service でスケールする計画がある場合に SignalR を選んでください。

WebSocket-Sharp を選ぶ場合

.NET Framework 3.5 / Mono を対象とする寛容な (MIT) ライセンスの WebSocket クライアントおよびサーバーが必要で、コミットハッシュへのピン留めとビルドへのソース取り込みを許容できる場合に WebSocket-Sharp を選んでください。

Fleck を選ぶ場合

HTTP.SYS を必要とせず、レガシーな Windows サーバー (7 / 2008) で動作し、TLS 証明書を自分で提供する小型の MIT ライセンス WebSocket サーバーが必要な場合に Fleck を選んでください。組み込みシナリオや小規模サービスに適しています。

Watson WebSocket を選ぶ場合

Joel Christner の Watson Webserver / Watson TCP ファミリーを既に使用しており、揃った API スタイルを維持したい場合に Watson WebSocket を選んでください。新規プロジェクトでは Watson Webserver (アクティブな後継) や本ページの他のライブラリの検討をおすすめします。

sgcWebSockets .NET への移行 — 相違点

上記のいずれかのライブラリから移行する場合の API と機能の相違点に関する短いメモです。対立的ではなく、実務的な対応関係を示します。

System.Net.WebSockets からの移行

System.Net.WebSockets はワイヤープロトコルを提供します。sgcWebSockets .NET はその上に MQTT / AMQP / STOMP / WAMP のサブプロトコル、HTTP/2、自動再接続、ウォッチドッグ、AI/LLM および取引所 API クライアント、WebRTC サーバー機能を追加します。ClientWebSocket の薄いラッパーを書いていた場合、移行はおおむねリネームとイベントハンドラーの移植で済みます。

ASP.NET Core SignalR からの移行

SignalR は WebSocket 上で独自のフレーミングプロトコルを使用します。sgcWebSockets は SignalR クライアントのワイヤープロトコル (TsgcWSAPI_SignalR および TsgcWSAPI_SignalRCore) を実装するため、sgcWebSockets で構築した Delphi または .NET クライアントは既存の ASP.NET Core SignalR サーバーと通信できます。SignalR バックエンド全体を生の WebSocket に移行する場合、ハブメソッドのディスパッチを独自のメッセージエンベロープとして再設計することになります。

WebSocket-Sharp からの移行

WebSocket-Sharp の WebSocket クライアントおよび WebSocketServer は、sgcWebSockets の TsgcWebSocketClient および TsgcWebSocketServer と密接に対応します。イベント名は異なります (OnMessage は両方に存在し、OnErrorOnClose は類似のシグネチャを持ちます)。サブプロトコル (MQTT / AMQP / STOMP / WAMP) は sgcWebSockets 固有です。

Fleck からの移行

Fleck はサーバー専用です。アプリケーションが Fleck サーバーと別のクライアントライブラリを併用している場合、sgcWebSockets .NET は両者を統合します。Fleck のハンドラーベース API (WebSocketServer.Start(socket => ...)) は、OnMessage / OnConnect ハンドラーを持つ sgcWebSockets のイベントベース TsgcWebSocketServer に対応します。

Watson WebSocket からの移行

Watson のクライアント / サーバーイベントサーフェス (MessageReceivedClientConnectedClientDisconnected) は、sgcWebSockets の OnMessage / OnConnect / OnDisconnect にきれいに対応します。サブプロトコルおよび AI/LLM API クライアントは sgcWebSockets 固有です。

すべての記述に出典リンク

上記マトリクスの各セルは、これらの公式ドキュメントページ、リポジトリ、リリースノートのいずれかに遡れます。すべての URL は執筆時点で HEAD チェック済みです。

ソースURL
sgcWebSockets — 製品ページhttps://www.esegece.com/products/websockets/
sgcWebSockets — .NET 機能マトリクスhttps://www.esegece.com/products/websockets/features/feature-matrix-net/
RFC 6455 — WebSocket プロトコルhttps://datatracker.ietf.org/doc/html/rfc6455
RFC 7692 — WebSocket の圧縮拡張 (per-message-deflate)https://datatracker.ietf.org/doc/html/rfc7692
System.Net.WebSockets — 名前空間ドキュメントhttps://learn.microsoft.com/en-us/dotnet/api/system.net.websockets
ClientWebSocket — .NET API リファレンスhttps://learn.microsoft.com/en-us/dotnet/api/system.net.websockets.clientwebsocket
WebSocketDeflateOptions — .NET の per-message-deflate サポートhttps://learn.microsoft.com/en-us/dotnet/api/system.net.websockets.websocketdeflateoptions
ASP.NET Core SignalR — 概要https://learn.microsoft.com/en-us/aspnet/core/signalr/introduction
SignalR リポジトリ (dotnet/aspnetcore)https://github.com/dotnet/aspnetcore
WebSocket-Sharp — GitHub リポジトリhttps://github.com/sta/websocket-sharp
Fleck — GitHub リポジトリhttps://github.com/statianzo/Fleck
Fleck — リリース (2016 年に 0.14.0)https://github.com/statianzo/Fleck/releases
Watson WebSocket — GitHub リポジトリ (アーカイブ済み)https://github.com/jchristn/WatsonWebsocket

sgcWebSockets .NET を試す

無料の Community エディションをダウンロードして、ご自身のアプリケーションで現在お使いのライブラリと sgcWebSockets .NET をベンチマーク比較してください。