TsgcWebTransportSession › Eigenschaften › SessionId
QUIC-Stream-ID der Extended-CONNECT-Anfrage, die diese WebTransport-Sitzung aufgebaut hat.
property SessionId: Int64 read FSessionId;
Int64 (__int64 in C++Builder, long in C#).
Wird vom Konstruktor zugewiesen. Auf dem Client ist es die QUIC-Stream-ID des CONNECT-Streams oder 0, wenn der Transport keine Standard-Stream-ID meldet. Auf dem Server ist es die Anfrage-Stream-ID, auf der das CONNECT eintraf.
Schreibgeschützt. SessionId wird beim Erzeugen des Sitzungsobjekts gesetzt und ändert sich während der gesamten Lebensdauer der Sitzung nicht.
WebTransport erfindet keinen eigenen Sitzungsbezeichner. Es verwendet die QUIC-Stream-ID der Extended-CONNECT-Anfrage wieder, die die Sitzung eröffnet hat, weil diese Stream-ID innerhalb der Verbindung bereits eindeutig ist und beide Peers sie kennen. Dieser Anfrage-Stream bleibt so lange offen, wie die Sitzung besteht, und trägt keinen HTTP-Body.
Die Session-ID ist der Anker für alles Weitere auf der Leitung. Jedem WebTransport-Stream wird ein Header vorangestellt, der seine Sitzung benennt:
| Stream-Art | Auf dem QUIC-Stream geschriebener Header |
|---|---|
| Unidirectional | varint(0x54) + varint(SessionId) |
| Bidirectional | varint(0x41) + varint(SessionId) (der WEBTRANSPORT_STREAM-Frame-Typ) |
So ermittelt ein Peer beim Auftauchen eines brandneuen QUIC-Streams, zu welcher Sitzung er gehört. Die Bibliothek schreibt und parst diese Header für Sie. Datagramme verwenden eine komprimierte Form derselben Identität; siehe QuarterStreamId.
Verwechseln Sie SessionId nicht mit TsgcWebTransportStream.StreamId. Beide sind QUIC-Stream-IDs, aber die Session-ID benennt den CONNECT-Stream, während eine Stream-ID einen einzelnen Datenstream innerhalb der Sitzung benennt.
procedure TfrmServer.OnWTSession(Sender: TObject;
const aConnection: TsgcQUICServerConnection;
const aSession: TsgcWebTransportSession; var aAccept: Boolean);
begin
aAccept := True;
memoLog.Lines.Add('session accepted: id=' + IntToStr(aSession.SessionId) +
' from ' + aConnection.PeerIP + ':' + IntToStr(aConnection.PeerPort));
aSession.OnStream := OnWTStream;
end;