sgcQUIC 省こう、 余計な往復を。 ネイティブ QUIC。

TCP と TLS では、レスポンスの最初の 1 バイトが届くまでに 3 回の往復が必要です。QUIC はトランスポートと暗号ハンドシェイクを 1 つに折りたたみ、再開されたコネクションは最初のパケットでデータを送信できます。sgcQUIC は、Delphi、C++ Builder、.NET に、ネイティブな QUIC トランスポートと、その上に構築された HTTP/3 のクライアントとサーバーを、OpenSSL 3.5 の QUIC エンジン上で提供します。

sgcWebSockets Enterprise のアドオンです。価格を見る →
  • RFC 9000、9114、9204
  • WebTransport(RFC 9220)
  • 0-RTT
  • コネクションマイグレーション
  • Delphi
  • C++ Builder
  • .NET
  • 41 つのパレットページにまとまったコンポーネント
  • 4RFC: 9000、9114、9204、9220
  • 1データ送信前の往復は 1 回。TCP と TLS では 3 回です
  • 0-RTT再開したセッションの最初のパケットで最初のリクエストを送信
  • 3言語: Delphi、C++ Builder、.NET
なぜ QUIC か

同じ TLS 1.3 のセキュリティで、通信の往復を削減。

TCP では、トランスポートのハンドシェイク、TLS のハンドシェイク、最初のリクエストにそれぞれ 1 往復かかります。QUIC ならこの 3 つを 1 回のやり取りで運べます。

TCP + TLS 1.3 QUIC (HTTP/3) クライアント サーバー クライアント サーバー SYN SYN-ACK ACK ClientHello ServerHello、証明書 Finished GET /pets/42 200 OK データ到達まで3往復 Initial + Handshake + GET Handshake + 200 OK データ到達まで1往復 セッション再開時は 0-RTT: GET + アーリーデータ 同じ TLS 1.3 のセキュリティで、通信の往復を削減。

TCP + TLS: 3 往復

SYN、SYN-ACK、ACK でソケットを開きます。ClientHello、ServerHello、Finished で TLS を確立します。最初のリクエストが送られるのは、そのあとです。

QUIC: 1 往復

QUIC はトランスポートと暗号のハンドシェイクを 1 回のやり取りにまとめるため、リクエストはハンドシェイクと一緒に送られ、レスポンスも一緒に返ってきます。

再開時: 0-RTT

以前に接続したことがあるクライアントは、ハンドシェイクが完了する前に、最初のパケットで最初のリクエストを送信できます。

動作を見る

Delphi から QUIC と HTTP/3 を、数分で。

ナレーションと字幕付きのクイックスタートです。HTTP/3 のサーバーとクライアント、続いて複数ストリームの生の QUIC 接続を扱います。再生ボタンを押すまで何もダウンロードされません。

sgcQUIC クイックスタート

Delphi から HTTP/3 のサーバーとクライアントを動かし、生の QUIC 接続を開きます。

  1. HTTP/3 クライアント作成して、URL を指定して Get を呼び出し、レスポンスを読み取ります。メソッド、ステータスコード、ヘッダーはおなじみのものです。
  2. 同期でも非同期でもOnResponse と OnError を処理して GetAsync を呼び出せば、フォームをブロックせずにリクエストが実行されます。
  3. HTTP/3 サーバーTsgcHTTP3Server を作成し、ポート、証明書、秘密鍵を設定して、OnH3Request を処理します。
  4. 生の QUIC と多数のストリームTsgcQUICClient を単体で使い、EnableMultiStream で独立したストリームを扱います。各ストリームは順序とフロー制御が保証されます。
  5. 配布の前にQUIC は UDP 上を流れるため、TCP 443 しか開けていないファイアウォールでは遮断されます。
4 つのコンポーネント

生の QUIC、またはその上の HTTP/3。

独自のフレーミングを使う素のトランスポートには TsgcQUICClient と TsgcQUICServer を、ワイヤーフォーマットが HTTP であれば TsgcHTTP3Client と TsgcHTTP3Server を直接使用します。

QUIC クライアント・サーバー

TsgcQUICClient と TsgcQUICServer は、生の QUIC を話します: 1 つの暗号化されたコネクション上での複数の独立したストリーム、信頼性のないデータグラム、そしてセッション途中でクライアントの IP アドレスが変わった場合のコネクションマイグレーションです。

QUIC コンポーネントを見る →

HTTP/3 クライアント・サーバー

TsgcHTTP3Client と TsgcHTTP3Server は、その上に HTTP のセマンティクスを重ねます: QPACK で圧縮されたリクエスト/レスポンスヘッダー、Alt-Svc によるディスカバリー、そしてすでに HTTP/2 のコードで使っているのと同じメソッドとステータスコードです。

HTTP/3 コンポーネントを見る →

0-RTT セッション再開

以前に接続したことがあるクライアントは、ハンドシェイクが完了する前に、最初のパケットで最初のリクエストを送信できます。

コネクションマイグレーション

IP アドレスではなく Connection ID がセッションを識別するため、スマートフォンが Wi-Fi からモバイル回線に切り替わっても、ストリームは開いたままです。

WebTransport

1 つの Extended CONNECT リクエスト上での双方向ストリームと信頼性のないデータグラムを、WebTransport に対応したブラウザクライアントに提供します。

ネイティブ QUIC、外部依存なし

QUIC と TLS 1.3 のハンドシェイクは、OpenSSL 3.5 自身の QUIC エンジン上で動作します。別途ビルドしたりベンダリングしたりする QUIC ライブラリはありません。

標準に基づく実装

QUIC と HTTP/3 を、RFC に忠実に。

sgcQUIC は部分的な実装ではありません。トランスポート、フレーミング、ヘッダー圧縮、そして WebTransport 拡張のすべてを、ネイティブ OpenSSL 3.5 QUIC エンジンの上でカバーしています。

RFC 9000

QUIC トランスポートプロトコル: ストリーム、データグラム、フロー制御、コネクションマイグレーション。

RFC 9114

HTTP/3。HTTP/2 と同じリクエスト/レスポンスのセマンティクスを、QUIC ストリーム上で運びます。

RFC 9204

QPACK ヘッダー圧縮。QUIC の順不同なストリーム配信に対応するよう設計されています。

RFC 9220

HTTP/3 上の WebTransport。1 つの Extended CONNECT リクエストで、双方向ストリームとデータグラムを実現します。

コード

HTTP/3 での 1 回のリクエスト。

他の sgcWebSockets HTTP クライアントと同じ形です。プロパティを設定し、イベントを処理し、メソッドを呼び出します。サーバー側は 1 つのコンポーネントと 1 つのハンドラーだけです。

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;
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;
  1. 1 つのポート、1 つの証明書、2 つのプロトコルTsgcHTTP3Server は UDP ポート上の QUIC で HTTP/3 を話します。既存の HTTP/2 サーバーと組み合わせれば、従来のクライアントは引き続き TCP で動作し、HTTP/2 サーバーがすでに読み込んでいる同じ証明書を使えます。
  2. Alt-Svc で、アップグレードは自動的に通常の HTTP/2 レスポンスに Alt-Svc: h3=":443" ヘッダーを付けます。これを理解するクライアントは、リダイレクトや 2 つ目のドメインなしで、次のリクエストから QUIC を開きます。
  3. WebTransport を、同じポートでExtended CONNECT リクエストがストリームを WebTransport にアップグレードし、通常の HTTP/3 リクエストと並行して、ブラウザクライアントに双方向ストリームとデータグラムを提供します。

クライアントとサーバーは、双方で同じコネクション・ストリーム・データグラムモデルを共有します。 完全な機能マトリックス →

HTTP/3 サーバーコンポーネント

sgcWebSockets の一部

sgcWebSockets Enterprise のアドオンです。

ライセンス、サポート窓口、アップデートの頻度は、すでにお持ちのものと同じです。すべてのライセンスに、フルソースコード、1 年間のアップデート、ロイヤリティフリーの配布が含まれます。

Single

開発者 1 名のライセンス。同時に 1 台のマシンで使用できます。

€149

Team

開発者 2 名のライセンス。同時に 2 台のマシンで使用できます。

€249

Site

開発者数無制限。社内のすべてのマシンで使用できます。

€399

sgcQUIC には sgcWebSockets Enterprise が必要です。同じご注文に追加できます。QUIC クライアントとサーバー、HTTP/3 クライアントとサーバー、QPACK、Alt-Svc、WebTransport を、Delphi、C++ Builder、.NET で利用できます。

価格とエディションを見る
お客様の声

開発者の声

世界中の Delphi、C++ Builder、Lazarus、.NET 開発者から信頼されています。

sgcWebSockets ライブラリはとても便利でセットアップも簡単です。これからも頑張ってください!
Simone Moretti Delphi 開発者
sgcWebSockets は素晴らしく、サポートも最高です!
Christian Meyer 創業者 & CTO
ご支援とサポートに本当に感謝しています。コンポーネントが大好きです。
Mark Steinfeld CTO

IDE から離れずに、QUIC と HTTP/3 を出荷。

生の QUIC トランスポート、HTTP/3 のクライアントとサーバー、そして WebTransport を、OpenSSL 3.5 の QUIC エンジン上で。完全なソースコード、ロイヤリティフリーの配布、sgcWebSockets Enterprise のアドオンとして。

eSeGeCe の製品をもっと

eSeGeCe のその他の製品

sgcQUIC は、Delphi、C++ Builder、.NET 向けの他の eSeGeCe コンポーネントライブラリと規約を共有しています。フルソース付きで提供され、ロイヤリティフリーで配布できます。

sgcWebSockets

WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI、そして 30 を超える API 統合。sgcQUIC の土台となる Enterprise ライセンスです。

sgcHTML

Bootstrap 5 と htmx を基盤とする、サーバーサイド HTML / UI コンポーネント。同じ HTTP/3 トランスポート上で、レンダリングされた UI を配信できます。

sgcAI

Delphi と C++ Builder 向けの AI、LLM、MCP コンポーネント。1 つのコンポーネントで 7 社の LLM プロバイダーに対応し、MCP、埋め込み、音声も利用できます。単体製品で、sgcWebSockets Core ランタイムを同梱しています。

sgcMQ

Delphi と C++ Builder 向けの MQTT、AMQP 0.9.1 および 1.0、Apache Kafka、STOMP のクライアントコンポーネント。単体製品で、sgcWebSockets Core ランタイムを同梱しています。

sgcAuth

Delphi と C++ Builder 向けの OAuth2 クライアント、JWT クライアント、WebAuthn 対応。単体で提供され、sgcWebSockets Core ランタイムが同梱されます。

sgcHTTP

Delphi と C++ Builder 向けの HTTP サーバー、HTTP/2 クライアント、gRPC クライアント、そして Google Cloud の Pub/Sub、Calendar、FCM クライアントです。単体製品で、sgcWebSockets Core ランタイムを同梱しています。

sgcREST

Delphi と C++ Builder 向けの REST サーバー、OpenAPI サーバー、OpenAPI クライアントのコンポーネント。単体で提供され、sgcWebSockets Core ランタイムが同梱されます。

sgcOpenAPI

OpenAPI 3.x パーサー、ネイティブ Pascal SDK ジェネレーター、OpenAPI サーバーコンポーネント、そして 1,195 以上のビルド済みクラウド SDK。

sgcSign

ドキュメントには XAdES、PAdES、CAdES、ASiC、コードには Authenticode、ClickOnce、NuGet、VSIX。

sgcPDF

PDF ファイルの作成、編集、表示、署名、墨消し、検証を純粋な Object Pascal で提供します。DLL の配布は不要で、単体でライセンスされます。

sgcBiometrics

Delphi と C++ Builder 向けの Windows Hello、指紋センサー、Windows Biometric Framework。

sgcIndy

モダンな TLS、IPv6、HTTP/2 に対応した更新版 Indy TCP/IP コンポーネント。Delphi 7 から 13 まで対応します。

ブログの最新記事

すべての記事を見る →

現在は eSeGeCe の sgcQUIC ビューを表示しています。

別の切り口を見る →
30日間返金保証ご満足いただけない場合は、ご購入から30日以内に全額返金をリクエストできます。 返金ポリシーを見る