TsgcWebSocketLoadBalancerServer › Metody › Broadcast
Rozsyła wiadomość WebSocket do wszystkich serwerów zapasowych w klastrze, 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 jako ramka tekstowa WebSocket. |
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ą przez moduł równoważenia obciążenia, tak aby każdy zarejestrowany serwer zapasowy ponownie dostarczył ją do własnych lokalnie połączonych klientów WebSocket. Filtry są łączone semantyką AND: połączenie otrzymuje wiadomość tylko wtedy, gdy spełnia każdy niepusty filtr, i nigdy nie jest obsługiwane, gdy jego GUID znajduje się w liście Exclude. Żądania HTTP/HTTP2 są ignorowane, ponieważ Broadcast celuje wyłącznie w klientów, którzy ukończyli uzgadnianie WebSocket. Moduł równoważenia obciążenia przekazuje ładunek do każdego węzła zapasowego kolejno; błędy zapisu per-połączenie są zgłaszane przez zdarzenie OnException bez przerywania rozsyłania. Wywołanie działa w wątku wywołującym i zwraca wynik po przekazaniu ramek do każdego łącza prowadzącego do serwerów zapasowych.
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);
| Nazwa | Typ | Opis |
|---|---|---|
aStream | TStream | Strumień źródłowy, którego zawartość jest dostarczana do każdego pasującego klienta jako binarna ramka WebSocket. 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 rozgłasza zawartość strumienia jako ramkę binarną przez moduł równoważenia obciążenia, który przekazuje ładunek do każdego zarejestrowanego serwera zapasowego, aby mogły go ponownie dostarczyć do swoich lokalnych klientów WebSocket. Strumień jest odczytywany od bieżącej pozycji; moduł równoważenia obciążenia nie przejmuje jego własności, więc obiekt wywołujący musi utrzymywać strumień aktywny do powrotu Broadcast. Filtry kanałów, protokołów, Include i Exclude są oceniane na każdym węźle zapasowym podczas wysyłki ramki do własnych połączeń. Należy używać parametru aSize razem z aStreaming w celu przesyłania strumieniowego bardzo dużych ładunków jako wielu fragmentów WebSocket zamiast jednej zbyt dużej ramki.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;