TsgcWebSocketProxyServer › Methoden › Broadcast
Sendet dieselbe Nachricht an alle verbundenen WebSocket-Clients auf dem Proxy, 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-Nutzlast, die an jeden passenden WebSocket-Client als 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 an jede aktive WebSocket-Verbindung, die die bereitgestellten Filter erfüllt. 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. Die Frames werden auf die browserseitige Seite jedes Tunnels geschrieben; der gepaarte vorgelagerte TCP-Link wird nicht berührt, sodass für das Backend bestimmte Daten stattdessen über den Weiterleitungspfad pro Verbindung gepusht werden müssen. Wenn LoadBalancer aktiviert ist, wird der Aufruf über den Cluster weitergeleitet, sodass Remote-Knoten die Nachricht ebenfalls an ihre lokalen Clients zustellen. Der Aufruf läuft im Thread des Aufrufers und kehrt zurück, sobald die Frames an jeden Socket übergeben wurden; Schreibfehler pro Verbindung werden über OnException gemeldet, ohne den Broadcast abzubrechen.
oServer.Broadcast('Hello From Proxy 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 WebSocket-Client als 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 verteilt den Stream-Inhalt als Binär-Frame per Broadcast an jede WebSocket-Verbindung, die die Filter für Kanal, Protokoll, Include und Exclude passiert. Der Stream wird ab seiner aktuellen Position gelesen; der Server übernimmt nicht das Eigentum, daher muss der Aufrufer den Stream am Leben halten, bis Broadcast zurückkehrt. Die Binärnutzlast wird nur auf der dem Browser zugewandten Seite jedes Tunnels zugestellt; die vorgelagerten TCP-Clients, die das Proxy-Backend speisen, werden durch diesen Aufruf nicht beschrieben. Wenn LoadBalancer aktiviert ist, wird die Binärnutzlast an andere Knoten weitergeleitet, sodass sie sie erneut an ihre lokalen Clients zustellen können. Verwenden Sie aSize zusammen mit aStreaming, um sehr große Nutzlasten als mehrere WebSocket-Fragmente anstelle eines übergroßen Frames zu streamen.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;