TsgcHTTP3Server › Methoden › SendGoAway
Sendet einen GOAWAY-Frame, um eine HTTP/3-Verbindung ordnungsgemäß herunterzufahren.
procedure SendGoAway(const aQUICConn: TsgcQUICServerConnection; aLastStreamId: Int64); virtual;
| Name | Typ | Beschreibung |
|---|---|---|
aQUICConn | const TsgcQUICServerConnection | QUIC-Verbindung, die heruntergefahren wird. |
aLastStreamId | Int64 | Bezeichner des letzten Anfrage-Streams, den der Server zu verarbeiten bereit ist. Anfragen auf höheren Stream-IDs werden nicht behandelt und können vom Client auf einer neuen Verbindung wiederholt werden. |
SendGoAway sendet einen HTTP/3-GOAWAY-Frame (RFC 9114 Abschnitt 5.2), um eine ordnungsgemäße Beendigung einer Verbindung einzuleiten. Er teilt dem Peer den höchstnummerierten Anfrage-Stream mit, den der Server noch verarbeiten wird, sodass der Client keine neuen Anfrage-Streams mehr öffnet und alles jenseits von aLastStreamId gefahrlos anderswo wiederholen kann, ohne eine doppelte nicht-idempotente Anfrage zu riskieren.
GOAWAY ist ein Hinweis, kein Schließen. Es beendet weder die Verbindung, noch bricht es laufende Anfragen ab oder stoppt den Listener: Anfragen mit einer ID kleiner oder gleich aLastStreamId laufen bis zum Abschluss weiter, und die Anwendung entscheidet, wann geschlossen wird. Die übliche Drain-Sequenz besteht darin, GOAWAY zu senden, ausstehende Anfragen beenden zu lassen und dann den Server mit Stop zu stoppen oder den Client die Verbindung trennen zu lassen. Das ermöglicht einen sauberen Neustart oder das Entfernen eines Knotens aus einem Pool, ohne aktive Anfragen zurückzusetzen.
Der Frame wird auf dem Standard-Stream der Verbindung geschrieben. Er wird pro Verbindung gesendet, das Entleeren eines gesamten Servers bedeutet daher, SendGoAway für jede aktuell bediente Verbindung aufzurufen.
.NET-Unterschied. Die .NET-Implementierung deklariert SendGoAway mit einer Verbindungs-ID-Zeichenfolge anstelle eines Verbindungsobjekts, und die Methode ist derzeit eine No-Op, sodass kein GOAWAY-Frame geschrieben wird. Das HTTP/3-Control-Stream-Framing existiert in .NET durchaus, und der Server verwendet es, um seine eigenen SETTINGS anzukündigen, wenn WebTransport aktiviert ist, aber SendGoAway wurde nie damit verbunden: Der Methodenrumpf ignoriert seine Argumente und kehrt zurück. Verwenden Sie die Delphi/C++Builder-Implementierung, um eine Verbindung mit GOAWAY geordnet zu beenden.
// stop accepting new requests, let the ones already in flight finish
oServer.SendGoAway(aConnection, aStreamId);