TsgcQUICClient는 서버에 QUIC 연결을 열고 QUIC 스트림을 통해 데이터를 교환하는 저수준 QUIC 클라이언트(RFC 9000)입니다.
TsgcQUICClient는 RFC 9000에 정의된 전송을 구현하는 저수준 QUIC 클라이언트입니다. 서버에 대한 QUIC 연결을 열고 QUIC 스트림을 통해 데이터를 교환하며, OpenSSL 3.5 이상에서 제공하는 QUIC 구현을 기반으로 합니다. 이 컴포넌트를 구성하려면 아래 단계를 따르십시오:
라이브러리는 QUIC를 두 가지 엔진 중 하나로 구동할 수 있으며, 엔진은 SSLQUICOptions.IOHandler를 따릅니다. iohOpenSSL(기본값)에서는 OpenSSL 빌드가 OSSL_QUIC_client_method를 내보내면 빌트인 엔진(qmBuiltin)이 사용되고, 그렇지 않고 OpenSSL 3.5 QUIC TLS API(SSL_set_quic_tls_cbs)를 내보내면 대체 경로로 sgc 엔진(qmCustom)이 사용됩니다. 둘 다 없으면 연결을 초기화할 때 예외가 발생합니다. iohNativeTLS에서는 항상 sgc 엔진이 사용되며, TLS 1.3 핸드셰이크는 네이티브 TLS 엔진에서 실행되고 세션 티켓, 재개, 0-RTT를 지원합니다. 패킷 보호도 네이티브이므로 OpenSSL을 전혀 로드하지 않습니다. 두 엔진 모두 EnableMultiStream, OpenStream, WriteStreamData를 통한 다중 스트림을 지원합니다. 엔진 비교는 QUIC를 참조하십시오.
1. TsgcQUICClient 컴포넌트의 새 인스턴스를 생성하고 QUIC 서버의 Host와 Port를 설정합니다.
2. OnQUICConnect 이벤트를 처리하고, Active를 True로 설정하여 연결을 열고 WriteData로 데이터를 보냅니다. 예제:
oClient := TsgcQUICClient.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.SSLQUIC := True;
oClient.OnQUICConnect := OnQUICConnectEvent;
oClient.Active := True;
oClient.WriteData('Hello QUIC');
procedure OnQUICConnectEvent(Sender: TObject; const
Connection: TsgcQUICConnectionClient);
begin
ShowMessage('Connected to QUIC server');
end;
| Name | 설명 |
|---|---|
| Active | 원격 서버에 대한 QUIC 연결을 열거나 닫습니다. |
| Host | 클라이언트가 연결할 QUIC 서버의 IP 주소 또는 DNS 이름입니다. |
| Port | QUIC 서버에 연결하는 데 사용되는 UDP 포트. |
| SSLQUIC | QUIC에서 요구하는 TLS 1.3 보안 레이어를 활성화합니다(기본으로 활성화됨). |
| QUICOptions | QUIC 전송에 대한 클라이언트 측 조정 옵션입니다. |
| Name | 설명 |
|---|---|
| Connect | QUIC 연결을 서버로 열고 연결이 설정되거나 타임아웃이 만료될 때까지 기다립니다. |
| Disconnect | 서버에 대한 QUIC 연결을 닫습니다. |
| WriteData | 기본 QUIC 스트림을 통해 서버로 데이터를 보냅니다. |
| OpenStream | 새 QUIC 스트림을 열고 이를 통해 데이터를 보낼 수 있도록 반환합니다. |
| Name | 설명 |
|---|---|
| OnQUICConnect | 클라이언트가 QUIC 서버에 성공적으로 연결된 직후에 발생합니다. |
| OnQUICDisconnect | QUIC 연결이 닫힐 때 발생합니다. |
| OnQUICException | QUIC 연결에서 예외가 발생할 때 발생합니다. |
oClient := TsgcQUICClient.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.SSLQUIC := True;
oClient.OnQUICConnect := OnQUICConnectEvent;
oClient.OnQUICDisconnect := OnQUICDisconnectEvent;
oClient.OnQUICException := OnQUICExceptionEvent;
if oClient.Connect then
begin
oClient.WriteData('Hello QUIC');
oClient.Disconnect;
end;
procedure OnQUICConnectEvent(Sender: TObject; const Connection: TsgcQUICConnectionClient);
begin
Log('connected');
end;
procedure OnQUICDisconnectEvent(Sender: TObject; const Connection: TsgcQUICConnectionClient; const Code: Integer);
begin
Log('disconnected, code ' + IntToStr(Code));
end;
procedure OnQUICExceptionEvent(Sender: TObject; E: Exception);
begin
Log('error: ' + E.Message);
end;