TsgcQUICClient › Methoden › OpenStream
Öffnet einen neuen, vom Client initiierten QUIC-Stream auf der aktiven Verbindung und gibt dessen Wrapper zurück.
function OpenStream(aUnidirectional: Boolean = False): TsgcQUICClientStream;
| Name | Typ | Beschreibung |
|---|---|---|
aUnidirectional | Boolean | Bei 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. |
Der Wrapper für den neu geöffneten Stream oder nil, wenn der Stream nicht geöffnet werden konnte. (TsgcQUICClientStream)
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.
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;