Delphi WebSocket コンポーネント — 本番グレードのクライアント&サーバー

Delphi と C++Builder 向けの、ネイティブ RFC 6455 WebSocket 実装。何千もの同時接続を保持し、Windows、macOS、Linux、iOS、Android で動作し、組み込みの WatchDog 自動再接続で不安定なネットワークを生き残るクライアントとサーバーを構築できます。

Delphi WebSocket コンポーネントとは?

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 ライブラリです。同じ TsgcWebSocketClientTsgcWebSocketHTTPServer コンポーネントが、Delphi 7 から Delphi 13 まで、Win32、Win64、Linux64、macOS、iOS、Android で、C++Builder C2007 から C13 まで、変更なしで動作します。マネージドランタイムなし、.NET 相互運用層なし、JavaScript ブリッジなし — バイナリにコンパイルされる純粋な Pascal 実装です。

コンポーネントクラス

TsgcWebSocketClient / TsgcWebSocketHTTPServer

標準

RFC 6455RFC 7692(permessage-deflate)

プラットフォーム

Windows、macOS、Linux、iOS、Android

Delphi バージョン

Delphi 7 → Delphi 13 + C++Builder

自作するより sgcWebSockets を選ぶ理由

1 つの PING/PONG ハンドラーを書くのは簡単。TLS 終端リバースプロキシ、IIS WebSocket モジュール、企業ファイアウォール、モバイルセルラーハンドオーバー、5,000 クライアントの負荷テストを生き残るのは違います。

1 つの API、あらゆるトランスポート

プレーン WebSocket(ws://)、TLS WebSocket(wss://)、HTTP/2 上の WebSocket、QUIC/HTTP/3 上の WebSocket、生 TCP フォールバック — 同じコンポーネント、同じイベント。1 つのプロパティを変えてトランスポートを切り替え。

WatchDog 自動再接続

WatchDog を有効にすると、クライアントは指数バックオフで再接続し、再認証し、MQTT トピックに再購読し、キューに入った発行をリプレイします — モバイル/IoT の標準パターンが既に記述済み。

スレッディングは解決済み

サーバーは内部で IOCP / kqueue / epoll リアクターを使用します。イベントハンドラーを書くと、ライブラリが接続ごとの直列化付きでスレッドプール全体にスケジューリングします。

permessage-deflate

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 ソケット、複数のアプリケーションプロトコル。

HTTP サーバーも

TsgcWebSocketHTTPServer は、静的ファイル、REST エンドポイント、JWT および OAuth2 保護リソース、gzip 圧縮レスポンス、HTTP/2 アップグレードを WebSocket エンドポイントと同じプロセスで提供します。

実際に動作する TLS

OpenSSL(クロスプラットフォーム)、SChannel(Windows カーネル TLS)または HTTP.sys。クライアント証明書、SNI、ALPN、0-RTT 付きの TLS 1.3。

チャネルとブロードキャスト

サーバー側 Channels が接続を名前でグループ化。BroadcastBroadcastByChannelBroadcastByUser が単一の呼び出しで数千ピアにファンアウト。

実戦試験済み

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 デーモンモードありあり

Hello WebSocket — 12 行の Delphi クライアント

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 を設定し、OnConnectOnMessage を処理し、接続済みのすべてのピアにファンアウトするには Broadcast を呼び出してください。

サポートされる Delphi と C++Builder バージョン

1 つのソースツリー、22 のランタイムパッケージ — いまだに商用で活発に使用されているすべての Delphi リリースをカバー。

エディションバージョン
Delphi / RAD Studio7, 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++Builder2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10, 10.1, 10.2, 10.3, 10.4, 11, 12, 13
FreePascal / Lazarus3.x(sgcIndy ベース経由)
プラットフォームWin32, Win64, Linux64, macOS Intel/ARM, iOS デバイス + シミュレーター, Android ARM/ARM64

探索を続ける

WebSocket トランスポートはライブラリ内の他のすべてのプロトコルの基盤です。

WebSocket とは?

RFC 6455 プロトコル、ハンドシェイク、フレーミング、ユースケースの背景。

MQTT サブプロトコル

同じ WebSocket 接続で MQTT 3.1.1 / 5.0 を実行。

HTTP/2 クライアント&サーバー

サーバープッシュと HTTP/2 上の WebSocket を備えた多重化 HTTP/2。

リアルタイムプロトコルピッカー

WebSocket vs SSE vs HTTP/2 push vs MQTT vs WebRTC — 判断マトリックス。

ブログ: チャネル、グループ、ユーザー

接続のサブセットへのブロードキャストのパターンガイド。

ブログ: WatchDog と BeforeConnect

自動再接続ライフサイクルが内部でどう動くか。

ブログ: より高速な圧縮

スループット vs CPU の permessage-deflate チューニング。

よくある質問

どの Delphi バージョンがサポートされていますか?

Delphi 7(2002)から Delphi 13(2025)までのすべての商用 Delphi リリース、加えて対応する C++Builder バージョン。単一ソースツリーから 22 個の個別ランタイムパッケージ — IDE ごとに 1 つ — を出荷します。別の「レガシー」SKU はなく、すべての顧客がすべてのバージョンを取得します。

WebSocket コンポーネントは TLS / wss:// をサポートしますか?

はい。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 年の更新を含むロイヤリティフリーの開発者ごと永続ライセンス。単一開発者、チーム、サイトライセンスが利用可能 — 価格を参照。ソースコードはすべての商用エディションに含まれます。

Delphi アプリに WebSocket を追加する準備はできましたか?

完全機能の 30 日間トライアルをダウンロード — クライアント、サーバー、すべてのサブプロトコル、すべての Delphi バージョン。