Delphi WebSocket コンポーネント — 本番グレードのクライアント&サーバー
Delphi と C++Builder 向けの、ネイティブ RFC 6455 WebSocket 実装。何千もの同時接続を保持し、Windows、macOS、Linux、iOS、Android で動作し、組み込みの WatchDog 自動再接続で不安定なネットワークを生き残るクライアントとサーバーを構築できます。
Delphi と C++Builder 向けの、ネイティブ RFC 6455 WebSocket 実装。何千もの同時接続を保持し、Windows、macOS、Linux、iOS、Android で動作し、組み込みの WatchDog 自動再接続で不安定なネットワークを生き残るクライアントとサーバーを構築できます。
WebSocket プロトコルを、ネイティブ Delphi 開発者が認識するプロパティとイベントの API に変換する、ドロップイン VCL/FMX コンポーネント。
Delphi WebSocket コンポーネントは、Delphi アプリケーションと任意の RFC 6455 WebSocket ピア — ブラウザ、Node.js サービス、nginx リバースプロキシ、Mosquitto ブローカー、OpenAI Realtime エンドポイント、または別の Delphi プロセス — の間で全二重 TCP チャネルを開くために、フォームにドロップする(または実行時にインスタンス化する)非可視コンポーネントです。HTTP ポーリングと異なり、WebSocket は接続を開いたまま保持します: サーバーはデータが利用可能になった瞬間にプッシュでき、ミリ秒のレイテンシでメッセージごとの HTTP オーバーヘッドはありません。
sgcWebSockets は 2013 年以来 Delphi エコシステムにおけるリファレンス WebSocket ライブラリです。同じ TsgcWebSocketClient と TsgcWebSocketHTTPServer コンポーネントが、Delphi 7 から Delphi 13 まで、Win32、Win64、Linux64、macOS、iOS、Android で、C++Builder C2007 から C13 まで、変更なしで動作します。マネージドランタイムなし、.NET 相互運用層なし、JavaScript ブリッジなし — バイナリにコンパイルされる純粋な Pascal 実装です。
1 つの PING/PONG ハンドラーを書くのは簡単。TLS 終端リバースプロキシ、IIS WebSocket モジュール、企業ファイアウォール、モバイルセルラーハンドオーバー、5,000 クライアントの負荷テストを生き残るのは違います。
プレーン WebSocket(ws://)、TLS WebSocket(wss://)、HTTP/2 上の WebSocket、QUIC/HTTP/3 上の WebSocket、生 TCP フォールバック — 同じコンポーネント、同じイベント。1 つのプロパティを変えてトランスポートを切り替え。
WatchDog を有効にすると、クライアントは指数バックオフで再接続し、再認証し、MQTT トピックに再購読し、キューに入った発行をリプレイします — モバイル/IoT の標準パターンが既に記述済み。
サーバーは内部で IOCP / kqueue / epoll リアクターを使用します。イベントハンドラーを書くと、ライブラリが接続ごとの直列化付きでスレッドプール全体にスケジューリングします。
RFC 7692 に従って自動ネゴシエート。JSON ペイロードを 70–90 % 削減し、すべてのモダンブラウザとロードバランサーがサポート。
MQTT 3.1.1/5.0、AMQP 0.9.1/1.0、STOMP、WAMP、Server-Sent Events が同じ WebSocket トランスポートに乗ります — 1 つの TCP ソケット、複数のアプリケーションプロトコル。
TsgcWebSocketHTTPServer は、静的ファイル、REST エンドポイント、JWT および OAuth2 保護リソース、gzip 圧縮レスポンス、HTTP/2 アップグレードを WebSocket エンドポイントと同じプロセスで提供します。
OpenSSL(クロスプラットフォーム)、SChannel(Windows カーネル TLS)または HTTP.sys。クライアント証明書、SNI、ALPN、0-RTT 付きの TLS 1.3。
サーバー側 Channels が接続を名前でグループ化。Broadcast、BroadcastByChannel、BroadcastByUser が単一の呼び出しで数千ピアにファンアウト。
2013 年以来、銀行、取引所、IoT 群、取引会社で本番稼働。毎月更新。history.txt がすべての修正を追跡。
RFC が言うすべて、加えて実デプロイが必要とする運用堅牢化。
| 能力 | クライアント | サーバー |
|---|---|---|
| RFC 6455 フレーミング(テキスト、バイナリ、ping、pong、close) | あり | あり |
| permessage-deflate(RFC 7692) | あり | あり |
| フラグメント&継続フレーム | あり | あり |
| マスク化クライアントメッセージ | あり | n/a |
| TLS 1.2 / 1.3(OpenSSL + SChannel) | あり | あり |
| クライアント証明書 / mTLS | あり | あり |
| JWT および OAuth2 認証 | あり | あり |
| HTTP/2 + WebSocket(RFC 8441) | あり | あり |
| QUIC 上の HTTP/3 + WebSocket(RFC 9220) | あり | あり |
| WatchDog 自動再接続 | あり | n/a |
| ハートビート(PING/PONG) | あり | あり |
| チャネルとブロードキャスト | n/a | あり |
| サブプロトコル(MQTT / AMQP / STOMP / WAMP / SSE) | あり | あり |
| HTTP.sys ホスティング(Windows カーネル) | n/a | あり |
| Linux デーモンモード | あり | あり |
TsgcWebSocketClient をフォームにドロップし、Host / Port を設定し、OnMessage を処理し、Active := True を設定。
uses
sgcWebSocket, sgcWebSocket_Classes;
procedure TForm1.FormCreate(Sender: TObject);
begin
WS := TsgcWebSocketClient.Create(nil);
WS.URL := 'wss://echo.websocket.events';
WS.WatchDog.Enabled := True;
WS.WatchDog.Interval := 5;
WS.OnConnect := WSConnect;
WS.OnMessage := WSMessage;
WS.OnDisconnect := WSDisconnect;
WS.Active := True;
end;
procedure TForm1.WSMessage(Connection: TsgcWSConnection; const Text: string);
begin
Memo1.Lines.Add('<< ' + Text);
end;
procedure TForm1.ButtonSendClick(Sender: TObject);
begin
WS.WriteData('{"hello":"world"}');
end;
サーバー側は対称的です — TsgcWebSocketHTTPServer をドロップし、Port を設定し、OnConnect と OnMessage を処理し、接続済みのすべてのピアにファンアウトするには Broadcast を呼び出してください。
1 つのソースツリー、22 のランタイムパッケージ — いまだに商用で活発に使用されているすべての Delphi リリースをカバー。
| エディション | バージョン |
|---|---|
| Delphi / RAD Studio | 7, 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney, 11 Alexandria, 12 Athens, 13 |
| C++Builder | 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10, 10.1, 10.2, 10.3, 10.4, 11, 12, 13 |
| FreePascal / Lazarus | 3.x(sgcIndy ベース経由) |
| プラットフォーム | Win32, Win64, Linux64, macOS Intel/ARM, iOS デバイス + シミュレーター, Android ARM/ARM64 |
WebSocket トランスポートはライブラリ内の他のすべてのプロトコルの基盤です。
RFC 6455 プロトコル、ハンドシェイク、フレーミング、ユースケースの背景。
同じ WebSocket 接続で MQTT 3.1.1 / 5.0 を実行。
サーバープッシュと HTTP/2 上の WebSocket を備えた多重化 HTTP/2。
WebSocket vs SSE vs HTTP/2 push vs MQTT vs WebRTC — 判断マトリックス。
接続のサブセットへのブロードキャストのパターンガイド。
自動再接続ライフサイクルが内部でどう動くか。
スループット vs CPU の permessage-deflate チューニング。
Delphi 7(2002)から Delphi 13(2025)までのすべての商用 Delphi リリース、加えて対応する C++Builder バージョン。単一ソースツリーから 22 個の個別ランタイムパッケージ — IDE ごとに 1 つ — を出荷します。別の「レガシー」SKU はなく、すべての顧客がすべてのバージョンを取得します。
はい。URL := 'wss://...' を設定し、TLS プロバイダー: OpenSSL(クロスプラットフォーム、トライアル同梱)、SChannel(Windows カーネル TLS、デプロイする DLL なし)、または HTTP.sys(サーバー側、証明書は Windows 証明書ストアに保存)を選んでください。クライアント証明書、SNI、ALPN、TLS 1.3、0-RTT がすべてサポートされます。
Windows ではサーバーは IOCP を使用し、コモディティハードウェア上でプロセスあたり 50,000 以上の同時接続に通常スケールします。Linux では epoll リアクターが同様にスケールします。ハード限界は OS レベル(ファイルディスクリプタ、エフェメラルポート範囲、カーネルメモリ)であり、ライブラリではありません。
1 年の更新を含むロイヤリティフリーの開発者ごと永続ライセンス。単一開発者、チーム、サイトライセンスが利用可能 — 価格を参照。ソースコードはすべての商用エディションに含まれます。