TsgcWebSocketProxyServer › Methods › Broadcast
Wysyła tę samą wiadomość do wszystkich połączonych klientów WebSocket na serwerze proxy, opcjonalnie filtrując według kanału, protokołu lub listy identyfikatorów GUID połączeń.
procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');
| Nazwa | Typ | Opis |
|---|---|---|
aMessage | const string | Ładunek tekstowy dostarczany do każdego pasującego klienta WebSocket jako ramka tekstowa. |
aChannel | const string | Jeśli wartość jest niepusta, wiadomość jest wysyłana wyłącznie do klientów subskrybujących podany kanał. |
aProtocol | const string | Jeżeli parametr nie jest pusty, wiadomość jest wysyłana tylko do klientów korzystających z podanego subprotokołu WebSocket. |
Exclude | const String | Lista identyfikatorów GUID połączeń oddzielona przecinkami, które mają zostać pominięte przez to rozgłoszenie. |
Include | const String | Rozdzielona przecinkami lista identyfikatorów GUID połączeń ograniczająca rozgłaszanie do tego podzbioru; ignorowana, gdy jest pusta. |
To przeciążenie wysyła ramkę tekstową do każdego aktywnego połączenia WebSocket spełniającego podane filtry. Filtry są łączone semantyką AND: połączenie otrzymuje wiadomość tylko wtedy, gdy spełnia każdy niepusty filtr, i nigdy nie jest osiągane, gdy jego GUID pojawia się w Exclude. Ramki są zapisywane po stronie przeglądarki każdego tunelu; sparowane łącze TCP w górę nie jest dotykane, więc dane przeznaczone dla zaplecza muszą być przesyłane ścieżką przekazywania dla danego połączenia. Gdy włączony jest LoadBalancer, wywołanie jest przekazywane do całego klastra, dzięki czemu zdalne węzły również dostarczają wiadomość swoim lokalnym klientom. Wywołanie działa w wątku wywołującego i zwraca wynik po przekazaniu ramek do każdego gniazda; błędy zapisu na poszczególnych połączeniach są zgłaszane przez OnException bez przerywania rozgłaszania.
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);
| Nazwa | Typ | Opis |
|---|---|---|
aStream | TStream | Strumień źródłowy, którego zawartość jest dostarczana do każdego pasującego klienta WebSocket jako ramka binarna. Wywołujący pozostaje właścicielem strumienia. |
aChannel | const string | Jeśli wartość jest niepusta, wiadomość jest wysyłana wyłącznie do klientów subskrybujących podany kanał. |
aProtocol | const string | Jeżeli parametr nie jest pusty, wiadomość jest wysyłana tylko do klientów korzystających z podanego subprotokołu WebSocket. |
Exclude | const String | Lista identyfikatorów GUID połączeń oddzielona przecinkami, które mają zostać pominięte przez to rozgłoszenie. |
Include | const String | Rozdzielona przecinkami lista identyfikatorów GUID połączeń ograniczająca rozgłaszanie do tego podzbioru; ignorowana, gdy jest pusta. |
aSize | const Integer | Opcjonalny rozmiar fragmentu w bajtach; gdy większy od zera, każdy klient odbiera strumień podzielony na fragmenty o tym rozmiarze. Użyć 0 (domyślnie), aby wysłać cały strumień jako pojedynczą ramkę. |
aStreaming | const TwsStreaming | Tryb strumieniowania dla pofragmentowanej transmisji (stmNone, stmStart, stmContinue, stmFinish). Domyślnie stmNone, co wysyła kompletną, samodzielną wiadomość. |
To przeciążenie rozsyła zawartość strumienia jako binarną ramkę do każdego połączenia WebSocket, które spełnia filtry kanału, protokołu, Include i Exclude. Strumień jest odczytywany od bieżącej pozycji; serwer nie przejmuje własności, dlatego wywołujący musi utrzymywać strumień w pamięci do momentu powrotu funkcji Broadcast. Ładunek binarny jest dostarczany wyłącznie po stronie klienta przeglądarki każdego tunelu; klienci TCP zasilający backend Proxy nie są zapisywani przez to wywołanie. Gdy LoadBalancer jest włączony, ładunek binarny jest przekazywany do innych węzłów, aby mogły ponownie dostarczyć go lokalnym klientom. Użyj aSize wraz z aStreaming, aby przesyłać strumieniowo bardzo duże ładunki jako wiele fragmentów WebSocket zamiast jednej nadmiernie dużej ramki.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;