TsgcQUICServer

TsgcQUICServer는 UDP를 통해 QUIC 연결을 수신 대기하고 QUIC 스트림을 통해 데이터를 교환하는 저수준 QUIC 서버입니다.

소개

TsgcQUICServer는 UDP를 통해 QUIC 연결을 수신 대기하고 QUIC 스트림을 통해 애플리케이션 데이터를 교환하는 저수준 QUIC 서버(RFC 9000)를 구현합니다. OpenSSL 3.5+ QUIC 리스너 API를 기반으로 하므로 QUIC는 항상 TLS 1.3 위에서 실행되며 서버 인증서와 개인 키가 필요합니다. 이 컴포넌트를 구성하려면 아래 단계를 따르십시오:

서버는 기본적으로 OpenSSL 3.5+ 내장 QUIC 엔진에서 실행됩니다. 로드된 OpenSSL 라이브러리가 이를 내보내면 OSSL_QUIC_server_method와 SSL_new_listener를 호출합니다. 그렇지 않으면 sgc QUIC 엔진으로 대체되며, QUICOptions.SSLOptions.IOHandler = iohNativeTLS인 경우 항상 sgc 엔진을 사용하고 TLS 1.3 핸드셰이크는 네이티브 TLS 엔진에서 실행됩니다. 읽기 전용 QUICMode 속성이 시작 시 선택된 엔진을 보고합니다. 엔진 비교는 QUIC를 참조하십시오.

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;

참조

주요 속성

Name설명
ActiveQUIC 서버가 활성화되어 들어오는 연결을 수신 대기 중인지 여부를 나타냅니다.
Port서버가 바인딩하여 들어오는 QUIC 연결을 수신 대기하는 UDP 포트.
QUICOptionsTLS 인증서와 개인 키, 최대 연결 수를 포함한 서버 구성.

주요 메서드

Name설명
StartOpenSSL을 로드하고 QUIC 리스너를 생성한 후 연결 수락을 시작합니다.
Stop수신 대기를 중지하고, 모든 활성 연결을 닫고, QUIC 리스너를 해제합니다.
WriteData연결된 피어에 기본 QUIC 스트림을 통해 애플리케이션 바이트를 전송합니다.

주요 이벤트

Name설명
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;

요구사항

요구 사항세부 정보
에디션Enterprise 에디션.
컴파일러 정의SGC_QUIC은 sgcVer.inc에서 활성화해야 합니다.
유닛sgcQUIC_Server
OpenSSLIOHandler = iohOpenSSL인 경우 OpenSSL 3.5 이상. 내장 엔진은 네이티브 QUIC 리스너 API(OSSL_QUIC_server_method, SSL_new_listener)를, sgc 엔진은 OpenSSL 3.5 QUIC TLS API를 사용하며 둘 다 이전 버전에는 없습니다. iohNativeTLS를 사용하면 OpenSSL이 필요하지 않습니다.