eSeGeCe — 面向 Delphi 和 .NET 的企业级通信组件
精选 · sgcQUIC

跳过握手往返

TCP 加 TLS 需要三次往返,才能等到响应的第一个字节。QUIC 把传输层握手和加密握手合并成一次,恢复的连接甚至可以在第一个数据包中就发送数据。sgcQUIC 为 Delphi、C++ Builder 和 .NET 提供了一个原生 QUIC 传输,以及构建在其上的 HTTP/3 客户端和服务器,基于 OpenSSL 3.5 QUIC 引擎。

  • RFC 9000, 9114, 9204
  • WebTransport (RFC 9220)
  • 0-RTT 与连接迁移
  • Delphi · C++ Builder · .NET

QUIC 与 HTTP/3,完全遵循 RFC 标准

sgcQUIC 不是一个残缺的实现。传输、成帧、头部压缩以及 WebTransport 扩展全部涵盖,构建在原生 OpenSSL 3.5 QUIC 引擎之上。

4 组件 TsgcQUICClient、TsgcQUICServer、TsgcHTTP3Client 和 TsgcHTTP3Server,同一个面板页面。
9000 RFC 9000 QUIC 传输协议:流、数据报、流量控制和连接迁移。
9114 RFC 9114 HTTP/3,与 HTTP/2 相同的请求和响应语义,通过 QUIC 流承载。
9204 RFC 9204 QPACK 头部压缩,专为 QUIC 的乱序流传递而设计。
9220 RFC 9220 基于 HTTP/3 的 WebTransport,通过一次 Extended CONNECT 请求实现双向流和数据报。
sgcQUIC

面向 Delphi、C++ Builder 和 .NET 的原始 QUIC 传输,以及 HTTP/3 客户端和服务器。作为 sgcWebSockets Enterprise 的附加组件,基于同一个原生 OpenSSL 3.5 QUIC 引擎。完整源代码,免版税部署。

原始 QUIC,或在其上运行 HTTP/3

如果需要自行定义帧格式的纯传输层,请使用 TsgcQUICClientTsgcQUICServer;如果线上格式就是 HTTP,则直接使用 TsgcHTTP3ClientTsgcHTTP3Server

RFC 9000

QUIC 客户端与服务器

TsgcQUICClientTsgcQUICServer 使用原始 QUIC 通信:在一个加密连接上运行多个独立的流、不可靠数据报,以及当客户端 IP 地址在会话中途改变时的连接迁移。

查看 QUIC 组件 →
RFC 9114

HTTP/3 客户端与服务器

TsgcHTTP3ClientTsgcHTTP3Server 在其上叠加 HTTP 语义:使用 QPACK 压缩的请求和响应头部、Alt-Svc 发现,以及您的 HTTP/2 代码已经在使用的相同方法和状态码。

查看 HTTP/3 组件 →
0-RTT

会话恢复

之前连接过的客户端可以在第一个数据包中就发送首个请求,甚至在握手完成之前。

Migration

连接迁移

连接 ID 而非 IP 地址标识会话,因此手机从 Wi-Fi 切换到蜂窝网络时,其数据流仍能保持打开。

WebTransport

RFC 9220

通过一次 Extended CONNECT 请求提供双向流和不可靠数据报,供支持 WebTransport 的浏览器客户端使用。

QUIC 和 HTTP/3 组件的实战指南:

通过 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 服务,而以 TsgcHTTP3ServerBridge 方式与现有的 HTTP/2 服务器配对,则能让旧版客户端继续通过 TCP 正常工作。宣告 Alt-Svc 后,现代客户端会自动升级。

HTTP3Server.pas
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;

这为您带来什么

一个单独的 Delphi 组件即可终止 QUIC 连接、协商 h3,并将每个请求路由到一个处理程序,使用的是您的 HTTP/2 服务器已经加载的同一份证书。

Alt-Svc,让升级自动完成

一个普通的 HTTP/2 响应会携带一个 Alt-Svc: h3=":443" 头部。能识别它的客户端会在下一次请求时开启 QUIC,无需重定向,也不需要第二个域名。

WebTransport,同一个端口

一次 Extended CONNECT 请求就能把一个流升级为 WebTransport,让浏览器客户端在普通 HTTP/3 请求之外,还能获得双向流和数据报。

原生 QUIC,无外部依赖

QUIC 和 TLS 1.3 握手运行在 OpenSSL 3.5 自身的 QUIC 引擎上。没有需要单独构建或引入的 QUIC 库。

OpenSSL 3.5 TLS 1.3 Alt-Svc QPACK WebTransport

HTTP/3 服务器组件 →

sgcQUIC 是 sgcWebSockets Enterprise 的附加组件,因此许可证、支持渠道和更新节奏都和您已经拥有的一致。

九个组件库,一个工具箱

sgcQUIC 是 eSeGeCe 面向 Delphi、C++ Builder 和 .NET 的九个组件库之一。它们共享同样的约定,提供完整源代码,并可免版税部署。

sgcQUIC

原始 QUIC 传输,以及 HTTP/3 客户端和服务器,并支持 WebTransport。作为 sgcWebSockets Enterprise 的附加组件。

了解更多 →

sgcWebSockets

WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI 及 30+ API 集成。sgcQUIC 正是构建在这份 Enterprise 许可证之上。

了解更多 →

sgcHTML

基于 Bootstrap 5 和 htmx 的服务器端 HTML 和界面组件。通过同一个 HTTP/3 传输提供渲染好的界面。

了解更多 →

sgcAI

面向 Delphi 和 C++ Builder 的 AI、LLM 和 MCP 组件。一个组件即可对接七家 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 支持。可对接任意 OAuth2/OIDC 提供商登录、签发并验证 JWT,并为原生应用添加通行密钥身份验证。独立产品,随附 sgcWebSockets Core 运行时。

了解更多 →

sgcHTTP

面向 Delphi 和 C++ Builder 的 HTTP/2 客户端、gRPC 客户端以及 Google Cloud Pub/Sub、Calendar 和 FCM 客户端。独立产品,随附 sgcWebSockets Core 运行时。

了解更多 →

sgcREST

面向 Delphi 和 C++ Builder 的 REST 服务器、OpenAPI 服务器和 OpenAPI 客户端组件。可从 OpenAPI 3.x 契约发布 REST API,或调用任何以 OpenAPI 描述的 API。独立产品,随附 sgcWebSockets Core 运行时。

了解更多 →

sgcOpenAPI

OpenAPI 3.x 解析器、原生 Pascal SDK 生成器、OpenAPI 服务器组件,以及 1,195+ 预构建云 SDK。

了解更多 →

sgcSign

文档使用 XAdES、PAdES、CAdES 和 ASiC,代码使用 Authenticode、ClickOnce、NuGet 和 VSIX。

了解更多 →

sgcBiometrics

面向 Delphi 和 C++ Builder 的 Windows Hello、指纹传感器和 Windows 生物特征框架。

了解更多 →

sgcIndy

更新后的 Indy TCP/IP 组件,为 Delphi 7 到 13 提供现代 TLS、IPv6 和 HTTP/2。

了解更多 →

查看价格和版本 下载免费试用版

开发者怎么说

受到全球各地 Delphi、C++ Builder、Lazarus 和 .NET 开发者的信赖。

你们的 sgcWebSockets 库非常实用,而且易于设置。请继续保持!

Simone Moretti Delphi 开发者

sgcWebSockets 非常出色,你们的支持也是最棒的!

Christian Meyer 创始人兼首席技术官

非常感谢你们的帮助和支持,我很喜欢你们的组件。

Mark Steinfeld 首席技术官

博客最新动态

查看全部文章 →

您正在浏览 eSeGeCe 的 QUIC 视角。

换个角度看看 →
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策

无需离开 IDE 即可交付 QUIC 与 HTTP/3

原始 QUIC 传输、HTTP/3 客户端和服务器,以及 WebTransport,构建在 OpenSSL 3.5 QUIC 引擎之上。完整源代码,免版税部署,作为 sgcWebSockets Enterprise 的附加组件。