TsgcWebSocketProxyServer › Methods › Broadcast
Verzendt hetzelfde bericht naar alle verbonden WebSocket-clients op de proxy, optioneel gefilterd op kanaal, protocol of verbindingsGUID-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 die als tekstframe wordt afgeleverd aan elke overeenkomende WebSocket-client. |
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 naar elke actieve WebSocket-verbinding die overeenkomt met de opgegeven filters. Filters worden gecombineerd met AND-semantiek: een verbinding ontvangt het bericht alleen wanneer deze aan elk niet-leeg filter voldoet, en wordt nooit bereikt wanneer de GUID ervan voorkomt in Exclude. De frames worden geschreven naar de browserzijde van elke tunnel; de gekoppelde upstream TCP-verbinding wordt niet aangeraakt, zodat gegevens die voor de backend zijn bedoeld, via het per-verbinding doorstuurpad moeten worden gepusht. Wanneer LoadBalancer is ingeschakeld, wordt de aanroep doorgestuurd naar het cluster zodat externe knooppunten het bericht ook aan hun lokale clients leveren. De aanroep wordt uitgevoerd op de thread van de aanroeper en keert terug zodra de frames aan elk socket zijn doorgegeven; schrijffouten per verbinding worden gerapporteerd via OnException zonder de broadcast te onderbreken.
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);
| Naam | Type | Beschrijving |
|---|---|---|
aStream | TStream | Bronstream waarvan de inhoud wordt bezorgd aan elke overeenkomende WebSocket-client als een binair 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 als een binair frame uit naar elke WebSocket-verbinding die de filters kanaal, protocol, Include en Exclude doorstaat. De stream wordt gelezen vanaf de huidige positie; de server neemt geen eigendom over, dus de aanroeper moet de stream actief houden totdat Broadcast terugkeert. De binaire payload wordt alleen bezorgd aan de browser-kant van elke tunnel; de upstream TCP-clients die de backend Proxy voeden, worden door deze aanroep niet beschreven. Wanneer LoadBalancer is ingeschakeld, wordt de binaire payload doorgestuurd naar andere knooppunten zodat ze het opnieuw kunnen bezorgen aan hun lokale clients. Gebruik aSize samen met aStreaming om zeer grote payloads te streamen als meerdere WebSocket-fragmenten in plaats van één oversized frame.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;