TsgcQUICClient › Methoden › OpenStream

OpenStream Methode

Öffnet einen neuen, vom Client initiierten QUIC-Stream auf der aktiven Verbindung und gibt dessen Wrapper zurück.

Syntax

function OpenStream(aUnidirectional: Boolean = False): TsgcQUICClientStream;

Parameter

NameTypBeschreibung
aUnidirectionalBooleanBei True wird ein unidirektionaler Stream geöffnet, auf den der Client nur schreiben kann. Bei False (Standard) wird ein bidirektionaler Stream geöffnet, der Daten in beide Richtungen übertragen kann.

Rückgabewert

Der Wrapper für den neu geöffneten Stream oder nil, wenn der Stream nicht geöffnet werden konnte. (TsgcQUICClientStream)

Hinweise

OpenStream erstellt einen neuen, vom Client initiierten Stream auf der aktiven Verbindung und gibt einen TsgcQUICClientStream-Wrapper zurück, der StreamId, Unidirectional und Incoming bereitstellt. Übergeben Sie den Wrapper an WriteStreamData, um darüber zu senden. Daten, die auf dem Stream zurückkommen, werden über OnQUICStreamData gemeldet, zugeordnet über StreamId.

Prüfen Sie das Ergebnis immer auf nil. Die Methode gibt nil zurück, statt eine Ausnahme auszulösen, wenn keine aktive Verbindung besteht, wenn SSLQUIC False ist oder wenn OpenSSL die Erstellung des Streams verweigert, zum Beispiel weil das Stream-Limit des Peers erreicht wurde.

Rufen Sie zuerst EnableMultiStream auf der hergestellten Verbindung auf. Ohne das befindet sich die Verbindung nicht im Multi-Stream-Modus, und nichts, was auf dem Stream zurückgelesen wird, wird gemeldet.

Der zurückgegebene Wrapper gehört der Verbindung und wird mit ihr freigegeben, geben Sie ihn nicht selbst frei. Jeder QUIC-Stream ist unabhängig geordnet, sodass ein verlorenes Paket auf einem Stream die anderen nicht blockiert, was genau die Head-of-Line-Blockierung ist, unter der HTTP/2 über TCP leidet.

Dieses Member ist derzeit nur in der Delphi/C++Builder-Implementierung verfügbar und erfordert die integrierte OpenSSL-QUIC-Engine.

Beispiel


var
  oStream: TsgcQUICClientStream;
begin
  oClient.EnableMultiStream;

  oStream := oClient.OpenStream; // bidirectional
  if Assigned(oStream) then
  begin
    Log('opened stream ' + IntToStr(oStream.StreamId));
    oClient.WriteStreamData(oStream, TEncoding.UTF8.GetBytes('Hello QUIC'));
  end
  else
    Log('could not open the stream');
end;

Zurück zu Methoden