TsgcWebSocketHTTPServer › Metodi › Broadcast
Invia lo stesso messaggio WebSocket a tutti i client connessi, 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 a ogni connessione WebSocket attiva ospitata dal server HTTP che corrisponde ai filtri forniti. I filtri vengono combinati con semantica AND: una connessione riceve il messaggio solo quando soddisfa ogni filtro non vuoto, e non viene mai raggiunta quando il suo GUID compare in Exclude. Le richieste HTTP/HTTP2 pure vengono ignorate perché Broadcast si rivolge solo ai client che hanno completato l'handshake WebSocket. Quando LoadBalancer è abilitato, la chiamata viene inoltrata nel cluster in modo che i nodi remoti consegnino anch'essi il messaggio ai propri client locali. La chiamata viene eseguita nel thread del chiamante e ritorna quando i frame sono stati consegnati a ciascun socket; gli errori di scrittura per singola connessione vengono segnalati tramite OnException senza interrompere il broadcast.
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 a ogni connessione WebSocket ospitata dal server HTTP che supera i filtri channel, protocol, Include ed Exclude. Lo stream viene letto dalla sua posizione corrente; il server non ne assume la proprietà, quindi il chiamante deve mantenere lo stream attivo finché Broadcast non ritorna. Quando LoadBalancer è abilitato, il payload binario viene inoltrato agli altri nodi in modo che possano riconsegnarlo ai propri client locali. Utilizzare aSize insieme a aStreaming per trasmettere payload molto grandi come più frammenti WebSocket invece di un unico frame sovradimensionato.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;