TsgcWebSocketLoadBalancerServer › Methoden › Broadcast
Verspreidt een WebSocket-bericht over alle back-upservers in het cluster, optioneel gefilterd op kanaal, protocol of verbinding-GUID-lijst.
procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');
| Naam | Type | Beschrijving |
|---|---|---|
aMessage | const string | Tekstpayload geleverd aan elke overeenkomende client als een WebSocket-tekstframe. |
aChannel | const string | Wanneer niet-leeg, wordt het bericht alleen verzonden naar clients die op het opgegeven channel zijn geabonneerd. |
aProtocol | const string | Wanneer niet leeg, wordt het bericht alleen verzonden naar clients die het opgegeven WebSocket-subprotocol gebruiken. |
Exclude | const String | Door komma's gescheiden lijst van verbindings-GUID's die door deze broadcast moeten worden overgeslagen. |
Include | const String | Door komma's gescheiden lijst van verbindings-GUID's die de broadcast beperken tot die subset; genegeerd wanneer leeg. |
Deze overload verzendt een tekstframe via de load balancer, zodat elke geregistreerde back-upserver het opnieuw bezorgt aan zijn eigen lokaal verbonden WebSocket-clients. Filters worden gecombineerd met AND-semantiek: een verbinding ontvangt het bericht alleen wanneer het aan elk niet-leeg filter voldoet, en wordt nooit bereikt wanneer zijn GUID in Exclude staat. Zuivere HTTP/HTTP2-verzoeken worden genegeerd omdat Broadcast alleen clients target die de WebSocket-handshake hebben voltooid. De load balancer stuurt de payload door naar elk back-upknooppunt; schrijffouten per verbinding worden gerapporteerd via OnException zonder de broadcast te onderbreken. De aanroep wordt uitgevoerd op de thread van de aanroeper en keert terug zodra de frames zijn overhandigd aan elke link naar de back-upservers.
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);
| Naam | Type | Beschrijving |
|---|---|---|
aStream | TStream | Bronstream waarvan de inhoud aan elke overeenkomende client wordt afgeleverd als een binair WebSocket-frame. De aanroeper blijft eigenaar van de stream. |
aChannel | const string | Wanneer niet-leeg, wordt het bericht alleen verzonden naar clients die op het opgegeven channel zijn geabonneerd. |
aProtocol | const string | Wanneer niet leeg, wordt het bericht alleen verzonden naar clients die het opgegeven WebSocket-subprotocol gebruiken. |
Exclude | const String | Door komma's gescheiden lijst van verbindings-GUID's die door deze broadcast moeten worden overgeslagen. |
Include | const String | Door komma's gescheiden lijst van verbindings-GUID's die de broadcast beperken tot die subset; genegeerd wanneer leeg. |
aSize | const Integer | Optionele fragmentgrootte in bytes; wanneer groter dan nul ontvangt elke client de stream opgesplitst in fragmenten van deze grootte. Gebruik 0 (de standaard) om de volledige stream als één frame te verzenden. |
aStreaming | const TwsStreaming | Streamingmodus voor gefragmenteerde overdracht (stmNone, stmStart, stmContinue, stmFinish). Standaard stmNone, waarmee een volledig zelfstandig bericht wordt verzonden. |
Deze overload zendt de streaminhoud uit als een binair frame via de load balancer, die de payload doorstuurt naar elke geregistreerde back-upserver zodat ze het opnieuw kunnen bezorgen aan hun lokale WebSocket-clients. De stream wordt gelezen vanaf de huidige positie; de load balancer neemt geen eigendom over, dus de aanroeper moet de stream actief houden totdat Broadcast terugkeert. De kanaal-, protocol-, Include- en Exclude-filters worden geëvalueerd op elk back-upknooppunt terwijl het het frame naar zijn eigen verbindingen verzendt. Gebruik aSize samen met aStreaming om zeer grote payloads als meerdere WebSocket-fragmenten te streamen in plaats van één oversized frame.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;