TsgcQUICServer 是一个低级 QUIC 服务器,通过 UDP 监听 QUIC 连接并通过 QUIC 流交换数据。
TsgcQUICServer 实现了一个低级 QUIC 服务器(RFC 9000),通过 UDP 监听 QUIC 连接并通过 QUIC 流交换应用程序数据。服务器默认运行在 OpenSSL 3.5+ 的内置 QUIC 引擎上,当加载的 OpenSSL 库导出该监听器 API 时调用它;否则回退到 sgc QUIC 引擎,而当 QUICOptions.SSLOptions.IOHandler = iohNativeTLS 时,则始终使用 sgc 引擎,TLS 1.3 握手运行在原生 TLS 引擎上。只读属性 QUICMode 报告启动时选择的引擎,引擎对比参阅 QUIC。QUIC 始终基于 TLS 1.3 运行,并且需要服务器证书和私钥。按照以下步骤配置该组件:
1. 创建 TsgcQUICServer 组件的新实例。
2. 设置监听 Port,并通过 QUICOptions.SSLOptions 配置服务器证书和私钥。
3. 处理 OnQUICConnect 和 OnQUICData 事件,并调用 Start 开始监听。示例:
oServer := TsgcQUICServer.Create(nil);
oServer.Port := 4433;
oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
oServer.QUICOptions.SSLOptions.KeyFile := 'key.pem';
oServer.OnQUICConnect := OnQUICConnectEvent;
oServer.OnQUICData := OnQUICDataEvent;
oServer.Start;
procedure OnQUICDataEvent(Sender: TObject; const aConnection:
TsgcQUICServerConnection; const aData: TBytes);
begin
// echo the received bytes back to the peer
oServer.WriteData(aConnection, aData);
end;
| 名称 | 描述 |
|---|---|
| Active | 指示 QUIC 服务器是否处于活动状态并正在监听传入连接。 |
| Port | 服务器绑定并监听传入 QUIC 连接的 UDP 端口。 |
| QUICOptions | 服务器配置,包括 TLS 证书和私钥以及最大连接数。 |
| 名称 | 描述 |
|---|---|
| Start | 加载 OpenSSL,创建 QUIC 监听器并开始接受连接。 |
| Stop | 停止监听,关闭每条活动连接并释放 QUIC 监听器。 |
| WriteData | 通过其默认 QUIC 流向已连接的对等方发送应用程序字节。 |
| 名称 | 描述 |
|---|---|
| OnQUICConnect | 当新的 QUIC 连接被接受且其第一条流就绪时触发。 |
| OnQUICData | 当从对等方的默认 QUIC 流接收到应用程序数据时触发。 |
| OnQUICDisconnect | QUIC 连接关闭时触发。 |
oServer := TsgcQUICServer.Create(nil);
oServer.Port := 4433;
oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
oServer.QUICOptions.SSLOptions.KeyFile := 'key.pem';
oServer.OnQUICConnect := OnQUICConnectEvent;
oServer.OnQUICData := OnQUICDataEvent;
oServer.OnQUICDisconnect := OnQUICDisconnectEvent;
oServer.OnQUICException := OnQUICExceptionEvent;
oServer.Start;
procedure OnQUICConnectEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection);
begin
Log('Connected: ' + aConnection.PeerIP);
end;
procedure OnQUICDataEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aData: TBytes);
begin
// echo the received bytes back to the peer
oServer.WriteData(aConnection, aData);
end;
procedure OnQUICDisconnectEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; aCode: Int64; const aReason: string);
begin
Log('Disconnected: ' + aReason);
end;
procedure OnQUICExceptionEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aException: Exception);
begin
Log('Error: ' + aException.Message);
end;
| 要求 | 详情 |
|---|---|
| 版本 | 企业版。 |
| 编译器定义 | SGC_QUIC 必须在 sgcVer.inc 中启用。 |
| 单元 | sgcQUIC_Server |
| OpenSSL | IOHandler = iohOpenSSL 时需要 OpenSSL 3.5 或更高版本。内置引擎使用原生 QUIC 监听器 API,sgc 引擎使用 OpenSSL 3.5 的 QUIC TLS API,二者在更早版本中均不存在。使用 iohNativeTLS 时无需 OpenSSL。 |