TsgcHTTP3Client › Ereignisse › OnPush
Wird ausgelöst, wenn eine vollständige gepushte Antwort vom Server empfangen wurde.
TsgcHTTP3PushEvent = procedure(Sender: TObject; aPushId: Int64;
const aResponse: TsgcHTTP3Response) of object;
property OnPush: TsgcHTTP3PushEvent read FOnPush write FOnPush;
| Name | Typ | Beschreibung |
|---|---|---|
Sender | TObject | Die TsgcHTTP3Client-Instanz, die das Ereignis ausgelöst hat. |
aPushId | Int64 | Bezeichner des Push, der mit dem zuvor über OnPushPromise gemeldeten übereinstimmt. |
aResponse | const TsgcHTTP3Response | Die gepushte Antwort mit ihrem Status, ihren Headern und ihrem Body. Rufen Sie GetDataAsString auf, um den Body als Text zu dekodieren. Nur innerhalb des Handlers gültig. |
OnPush liefert eine Ressource, die der Server ungefragt gesendet hat, sobald ihr Push-Stream vollständig ist. Jeder Push trifft auf seinem eigenen unidirektionalen Stream ein, der die Push-ID gefolgt von den Antwort-Headern und dem Body trägt (RFC 9114 Abschnitt 4.6), und der Client setzt sie zu einem normalen Antwortobjekt zusammen.
Die Reihenfolge für jeden Push ist zuerst OnPushPromise, das die Anfrage-Header trägt, die der Push beantworten wird, und dann dieses Ereignis mit der Antwort selbst. Ordnen Sie beide über aPushId einander zu. Ein mit CancelPush abgelehnter Push erreicht dieses Ereignis nie.
Server Push ist standardmäßig deaktiviert. Das Ereignis wird erst ausgelöst, nachdem der Client das Limit mit SetMaxPushId angehoben hat, und nur für Push-IDs innerhalb dieses Limits.
Die typische Verwendung besteht darin, die per Push übertragene Ressource in einem Anwendungscache abzulegen, sodass eine spätere Anfrage für denselben Pfad lokal bedient wird. Das Antwortobjekt gehört dem Client, kopieren Sie daher alles, was Sie behalten möchten.
Dieses Mitglied ist derzeit nur in der Delphi/C++Builder-Implementierung verfügbar.
oClient.OnPushPromise := OnPushPromiseEvent;
oClient.OnPush := OnPushEvent;
oClient.SetMaxPushId(9);
procedure TfrmMain.OnPushEvent(Sender: TObject; aPushId: Int64;
const aResponse: TsgcHTTP3Response);
begin
Log(Format('push %d: HTTP %d, %d bytes',
[aPushId, aResponse.StatusCode, Length(aResponse.Data)]));
end;