TsgcWebSocketLoadBalancerServer › Methoden › Broadcast
Fächert eine WebSocket-Nachricht über jeden Backup-Server im Cluster auf, optional gefiltert nach Kanal, Protokoll oder Verbindungs-GUID-Liste.
procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');
| Name | Typ | Beschreibung |
|---|---|---|
aMessage | const string | Text-Payload, die jedem übereinstimmenden Client als WebSocket-Text-Frame zugestellt wird. |
aChannel | const string | Wenn nicht leer, wird die Nachricht nur an Clients gesendet, die den angegebenen Kanal abonniert haben. |
aProtocol | const string | Wenn nicht leer, wird die Nachricht nur an Clients gesendet, die das angegebene WebSocket-Subprotokoll verwenden. |
Exclude | const String | Kommagetrennte Liste von Verbindungs-GUIDs, die von diesem Broadcast übersprungen werden müssen. |
Include | const String | Durch Kommas getrennte Liste von Verbindungs-GUIDs, die den Broadcast auf diese Teilmenge beschränkt; wird ignoriert, wenn leer. |
Diese Überladung sendet einen Text-Frame über den Load Balancer, sodass jeder registrierte Backup-Server ihn an seine eigenen lokal verbundenen WebSocket-Clients erneut zustellt. Filter werden mit UND-Semantik kombiniert: Eine Verbindung empfängt die Nachricht nur, wenn sie jeden nicht leeren Filter erfüllt, und wird nie erreicht, wenn ihre GUID in Exclude erscheint. Reine HTTP-/HTTP2-Anfragen werden ignoriert, da Broadcast nur Clients adressiert, die den WebSocket-Handshake abgeschlossen haben. Der Load Balancer leitet die Nutzlast nacheinander an jeden Backup-Knoten weiter; Schreibfehler pro Verbindung werden über OnException gemeldet, ohne den Broadcast abzubrechen. Der Aufruf läuft auf dem Thread des Aufrufers und kehrt zurück, sobald die Frames an jeden Link in Richtung der Backup-Server übergeben wurden.
oServer.Broadcast('Hello From Server');
procedure Broadcast(aStream: TStream; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = ''; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Typ | Beschreibung |
|---|---|---|
aStream | TStream | Quell-Stream, dessen Inhalt jedem passenden Client als WebSocket-Binär-Frame zugestellt wird. Der Aufrufer bleibt Eigentümer des Streams. |
aChannel | const string | Wenn nicht leer, wird die Nachricht nur an Clients gesendet, die den angegebenen Kanal abonniert haben. |
aProtocol | const string | Wenn nicht leer, wird die Nachricht nur an Clients gesendet, die das angegebene WebSocket-Subprotokoll verwenden. |
Exclude | const String | Kommagetrennte Liste von Verbindungs-GUIDs, die von diesem Broadcast übersprungen werden müssen. |
Include | const String | Durch Kommas getrennte Liste von Verbindungs-GUIDs, die den Broadcast auf diese Teilmenge beschränkt; wird ignoriert, wenn leer. |
aSize | const Integer | Optionale Fragmentgröße in Bytes; bei einem Wert größer als null erhält jeder Client den Stream in Fragmente dieser Größe aufgeteilt. Verwenden Sie 0 (Standard), um den gesamten Stream als einzelnen Frame zu senden. |
aStreaming | const TwsStreaming | Streaming-Modus für die fragmentierte Übertragung (stmNone, stmStart, stmContinue, stmFinish). Standard ist stmNone, was eine vollständige eigenständige Nachricht sendet. |
Diese Überladung sendet den Stream-Inhalt als Binär-Frame über den Load Balancer, der die Nutzlast an jeden registrierten Backup-Server weiterleitet, sodass dieser sie an seine lokalen WebSocket-Clients erneut zustellen kann. Der Stream wird ab seiner aktuellen Position gelesen; der Load Balancer übernimmt nicht den Besitz, sodass der Aufrufer den Stream am Leben halten muss, bis Broadcast zurückkehrt. Die Filter channel, protocol, Include und Exclude werden auf jedem Backup-Knoten ausgewertet, sobald er den Frame an seine eigenen Verbindungen versendet. Verwenden Sie aSize zusammen mit aStreaming, um sehr große Nutzlasten als mehrere WebSocket-Fragmente statt eines übergroßen Frames zu streamen.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;