TsgcQUICServer

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 流接收到应用程序数据时触发。
OnQUICDisconnectQUIC 连接关闭时触发。

完整示例


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
OpenSSLIOHandler = iohOpenSSL 时需要 OpenSSL 3.5 或更高版本。内置引擎使用原生 QUIC 监听器 API,sgc 引擎使用 OpenSSL 3.5 的 QUIC TLS API,二者在更早版本中均不存在。使用 iohNativeTLS 时无需 OpenSSL。