TsgcWebSocketHTTPServerMetodi › Broadcast

Broadcast Metodo

Invia lo stesso messaggio WebSocket a tutti i client connessi, con filtro opzionale per canale, protocollo o elenco di GUID di connessione.

Overload

Overload 1

Sintassi

procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');

Parametri

NomeTipoDescrizione
aMessageconst stringPayload testuale consegnato a ogni client corrispondente come frame di testo WebSocket.
aChannelconst stringSe non è vuoto, il messaggio viene inviato solo ai client sottoscritti al canale specificato.
aProtocolconst stringSe non vuoto, il messaggio viene inviato solo ai client che utilizzano il sotto-protocollo WebSocket specificato.
Excludeconst StringElenco separato da virgole di GUID di connessione che devono essere esclusi da questo broadcast.
Includeconst StringElenco separato da virgole di GUID di connessione che limitano la trasmissione a quel sottoinsieme; ignorato quando vuoto.

Note

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.

Esempio


oServer.Broadcast('Hello From Server');

Sovraccarico 2

Sintassi

procedure Broadcast(aStream: TStream; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = ''; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

Parametri

NomeTipoDescrizione
aStreamTStreamStream sorgente il cui contenuto viene consegnato a ogni client corrispondente come frame binario WebSocket. Il chiamante rimane il proprietario dello stream.
aChannelconst stringSe non è vuoto, il messaggio viene inviato solo ai client sottoscritti al canale specificato.
aProtocolconst stringSe non vuoto, il messaggio viene inviato solo ai client che utilizzano il sotto-protocollo WebSocket specificato.
Excludeconst StringElenco separato da virgole di GUID di connessione che devono essere esclusi da questo broadcast.
Includeconst StringElenco separato da virgole di GUID di connessione che limitano la trasmissione a quel sottoinsieme; ignorato quando vuoto.
aSizeconst IntegerDimensione 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.
aStreamingconst TwsStreamingModalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia un messaggio completo autonomo.

Note

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.

Esempio


oStream := TMemoryStream.Create;
try
  oStream.LoadFromFile('payload.bin');
  oServer.Broadcast(oStream);
finally
  oStream.Free;
end;

Torna ai Metodi