TsgcWebSocketLoadBalancerServer › Metodi › Broadcast
Distribuisce un messaggio WebSocket a tutti i server di backup nel cluster, con filtro opzionale per canale, protocollo o elenco di GUID di connessione.
procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');
| Nome | Tipo | Descrizione |
|---|---|---|
aMessage | const string | Payload testuale consegnato a ogni client corrispondente come frame di testo WebSocket. |
aChannel | const string | Se non è vuoto, il messaggio viene inviato solo ai client sottoscritti al canale specificato. |
aProtocol | const string | Se non vuoto, il messaggio viene inviato solo ai client che utilizzano il sotto-protocollo WebSocket specificato. |
Exclude | const String | Elenco separato da virgole di GUID di connessione che devono essere esclusi da questo broadcast. |
Include | const String | Elenco separato da virgole di GUID di connessione che limitano la trasmissione a quel sottoinsieme; ignorato quando vuoto. |
Questo overload invia un frame di testo attraverso il load balancer affinché ogni server backup registrato lo riconsegni ai propri client WebSocket connessi localmente. I filtri sono combinati con semantica AND: una connessione riceve il messaggio solo quando soddisfa tutti i filtri non vuoti, e non viene mai raggiunta se il suo GUID compare in Exclude. Le pure richieste HTTP/HTTP2 vengono ignorate perché Broadcast punta solo ai client che hanno completato l'handshake WebSocket. Il load balancer inoltra il payload a ciascun nodo backup in sequenza; gli errori di scrittura per connessione vengono segnalati tramite OnException senza interrompere il broadcast. La chiamata viene eseguita sul thread del chiamante e ritorna non appena i frame sono stati consegnati a ciascun collegamento verso i server backup.
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);
| Nome | Tipo | Descrizione |
|---|---|---|
aStream | TStream | Stream sorgente il cui contenuto viene consegnato a ogni client corrispondente come frame binario WebSocket. Il chiamante rimane il proprietario dello stream. |
aChannel | const string | Se non è vuoto, il messaggio viene inviato solo ai client sottoscritti al canale specificato. |
aProtocol | const string | Se non vuoto, il messaggio viene inviato solo ai client che utilizzano il sotto-protocollo WebSocket specificato. |
Exclude | const String | Elenco separato da virgole di GUID di connessione che devono essere esclusi da questo broadcast. |
Include | const String | Elenco separato da virgole di GUID di connessione che limitano la trasmissione a quel sottoinsieme; ignorato quando vuoto. |
aSize | const Integer | Dimensione facoltativa del frammento in byte; quando è maggiore di zero ogni client riceve lo stream suddiviso in frammenti di questa dimensione. Utilizzare 0 (il valore predefinito) per inviare l'intero stream come un singolo frame. |
aStreaming | const TwsStreaming | Modalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia un messaggio completo autonomo. |
Questo overload trasmette il contenuto dello stream come frame binario attraverso il load balancer, che inoltra il payload a ogni server di backup registrato affinché possano riconsegnarlo ai propri client WebSocket locali. Lo stream viene letto dalla sua posizione corrente; il load balancer non ne acquisisce la proprietà, quindi il chiamante deve mantenere lo stream attivo fino al ritorno di Broadcast. I filtri di canale, protocollo, Include ed Exclude vengono valutati su ogni nodo di backup mentre invia il frame alle proprie connessioni. Utilizzare aSize insieme a aStreaming per trasmettere payload molto grandi come più frammenti WebSocket anziché un singolo frame sovradimensionato.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;