QUIC クライアント・サーバー
TsgcQUICClient と TsgcQUICServer は、生の QUIC を話します: 1 つの暗号化されたコネクション上での複数の独立したストリーム、信頼性のないデータグラム、そしてセッション途中でクライアントの IP アドレスが変わった場合のコネクションマイグレーションです。
TCP と TLS では、レスポンスの最初の 1 バイトが届くまでに 3 回の往復が必要です。QUIC はトランスポートと暗号ハンドシェイクを 1 つに折りたたみ、再開されたコネクションは最初のパケットでデータを送信できます。sgcQUIC は、Delphi、C++ Builder、.NET に、ネイティブな QUIC トランスポートと、その上に構築された HTTP/3 のクライアントとサーバーを、OpenSSL 3.5 の QUIC エンジン上で提供します。
sgcQUIC は部分的な実装ではありません。トランスポート、フレーミング、ヘッダー圧縮、そして WebTransport 拡張のすべてを、ネイティブ OpenSSL 3.5 QUIC エンジンの上でカバーしています。
独自のフレーミングを使う素のトランスポートには TsgcQUICClient と TsgcQUICServer を、ワイヤーフォーマットが HTTP であれば TsgcHTTP3Client と TsgcHTTP3Server を直接使用します。
TsgcQUICClient と TsgcQUICServer は、生の QUIC を話します: 1 つの暗号化されたコネクション上での複数の独立したストリーム、信頼性のないデータグラム、そしてセッション途中でクライアントの IP アドレスが変わった場合のコネクションマイグレーションです。
TsgcHTTP3Client と TsgcHTTP3Server は、その上に HTTP のセマンティクスを重ねます: QPACK で圧縮されたリクエスト/レスポンスヘッダー、Alt-Svc によるディスカバリー、そしてすでに HTTP/2 のコードで使っているのと同じメソッドとステータスコードです。
以前に接続したことがあるクライアントは、ハンドシェイクが完了する前に、最初のパケットで最初のリクエストを送信できます。
IP アドレスではなく Connection ID がセッションを識別するため、スマートフォンが Wi-Fi からモバイル回線に切り替わっても、ストリームは開いたままです。
1 つの Extended CONNECT リクエスト上での双方向ストリームと信頼性のないデータグラムを、WebTransport に対応したブラウザクライアントに提供します。
QUIC と HTTP/3 コンポーネントの実践ガイド:
他の sgcWebSockets の HTTP クライアントと同じ形です: プロパティを設定し、イベントを処理し、メソッドを呼び出します。
uses
sgcHTTP3_Client;
var
vClient: TsgcHTTP3Client;
begin
vClient := TsgcHTTP3Client.Create(nil);
vClient.Host := 'api.example.com';
vClient.Port := 443;
vClient.OnResponse :=
procedure(Sender: TObject; const AStatus: Integer; const ABody: string)
begin
Memo1.Lines.Add(Format('%d: %s', [AStatus, ABody]));
end;
vClient.OnAltSvc :=
procedure(Sender: TObject; const AAltSvc: string)
begin
Memo1.Lines.Add('Alt-Svc: ' + AAltSvc); // h3 advertised over HTTP/2
end;
vClient.Connect;
vClient.Get('/pets/42');
end;
uses
sgcQUIC_Client;
var
vQUIC: TsgcQUICClient;
begin
vQUIC := TsgcQUICClient.Create(nil);
vQUIC.Host := 'quic.example.com';
vQUIC.Port := 4433;
vQUIC.EnableMultiStream := True;
vQUIC.OnQUICConnect :=
procedure(Sender: TObject)
var
vStreamId: Int64;
begin
vStreamId := vQUIC.OpenStream;
vQUIC.WriteData(vStreamId, 'ping');
end;
vQUIC.OnQUICStreamData :=
procedure(Sender: TObject; const AStreamId: Int64; const AData: string)
begin
Memo1.Lines.Add(Format('stream %d: %s', [AStreamId, AData]));
end;
vQUIC.Active := True;
end;
クライアントとサーバーは、双方で同じコネクション・ストリーム・データグラムモデルを共有します。完全な機能マトリックス →
TsgcHTTP3Server は UDP ポート上で QUIC 経由の HTTP/3 を話します。一方、既存の HTTP/2 サーバーと TsgcHTTP3ServerBridge のような形でペアにすれば、レガシークライアントは引き続き TCP 上で動作できます。Alt-Svc をアドバタイズすれば、モダンなクライアントは自らアップグレードします。
uses
sgcHTTP3_Server;
procedure TForm1.FormCreate(Sender: TObject);
begin
FServer := TsgcHTTP3Server.Create(nil);
FServer.Port := 443;
FServer.QUICOptions.SSLOptions.CertFile := 'server.crt';
FServer.QUICOptions.SSLOptions.KeyFile := 'server.key';
// One handler for every incoming HTTP/3 request
FServer.OnH3Request :=
procedure(const Ctx: TsgcHTTP3Context)
begin
if Ctx.Path = '/pets/42' then
Ctx.RespondJSON(200, '{"name":"Rex"}')
else
Ctx.Respond(404, 'Not found');
end;
FServer.Active := True;
end;
QUIC を終端し、h3 をネゴシエートし、すべてのリクエストを 1 つのハンドラーにルーティングする、1 つの Delphi コンポーネントです。証明書は、すでに HTTP/2 サーバーが読み込んでいるものと同じものを使います。
通常の HTTP/2 レスポンスには Alt-Svc: h3=":443" ヘッダーが含まれます。これを理解するクライアントは、リダイレクトや別ドメインを介さずに、次のリクエストで QUIC を開きます。
Extended CONNECT リクエストがストリームを WebTransport にアップグレードし、通常の HTTP/3 リクエストと並行して、ブラウザクライアントに双方向ストリームとデータグラムを提供します。
QUIC と TLS 1.3 のハンドシェイクは、OpenSSL 3.5 自身の QUIC エンジン上で動作します。別途ビルドしたりベンダリングしたりする QUIC ライブラリはありません。
sgcQUIC は sgcWebSockets Enterprise のアドオンです。ライセンス、サポート窓口、アップデートの頻度は、すでにお使いのものがそのまま適用されます。
sgcQUIC は、Delphi、C++ Builder、.NET 向けの eSeGeCe コンポーネントライブラリ 9 製品のひとつです。共通の設計思想を持ち、完全なソースが付属し、ロイヤリティフリーで配布できます。
生の QUIC トランスポートと HTTP/3 のクライアントおよびサーバー、WebTransport 対応。sgcWebSockets Enterprise のアドオンです。
詳しく見る →WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI、そして 30 を超える API 統合。sgcQUIC の土台となる Enterprise ライセンスです。
詳しく見る →Bootstrap 5 と htmx を基盤とする、サーバーサイド HTML / UI コンポーネント。同じ HTTP/3 トランスポート上で、レンダリングされた UI を配信できます。
詳しく見る →Delphi と C++ Builder 向けの AI、LLM、MCP コンポーネント。1 つのコンポーネントで 7 社の LLM プロバイダーに対応し、MCP、埋め込み、音声も利用できます。単体製品で、sgcWebSockets Core ランタイムを同梱しています。
詳しく見る →Delphi と C++ Builder 向けの MQTT、AMQP 0.9.1 および 1.0、Apache Kafka、STOMP のクライアントコンポーネント。単体製品で、sgcWebSockets Core ランタイムを同梱しています。
詳しく見る →Delphi と C++ Builder 向けの OAuth2 クライアント、JWT クライアント、WebAuthn 対応。任意の OAuth2/OIDC プロバイダーでサインインし、JWT を発行・検証し、ネイティブアプリにパスキー認証を追加できます。単体製品で、sgcWebSockets Core ランタイムを同梱しています。
詳しく見る →Delphi と C++ Builder 向けの HTTP/2 クライアント、gRPC クライアント、そして Google Cloud の Pub/Sub、Calendar、FCM クライアントです。単体製品で、sgcWebSockets Core ランタイムを同梱しています。
詳しく見る →Delphi と C++ Builder 向けの REST サーバー、OpenAPI サーバー、OpenAPI クライアントコンポーネントです。OpenAPI 3.x の契約から REST API を公開したり、OpenAPI で記述された任意の API を利用したりできます。単体製品で、sgcWebSockets Core ランタイムを同梱しています。
詳しく見る →OpenAPI 3.x パーサー、ネイティブ Pascal SDK ジェネレーター、OpenAPI サーバーコンポーネント、そして 1,195 以上のビルド済みクラウド SDK。
詳しく見る →世界中の Delphi、C++ Builder、Lazarus、.NET 開発者から信頼されています。
sgcWebSockets ライブラリはとても便利でセットアップも簡単です。これからも頑張ってください!
sgcWebSockets は素晴らしく、サポートも最高です!
ご支援とサポートに本当に感謝しています。コンポーネントが大好きです。