TsgcWebSocketLoadBalancerServerMetody › WriteData

WriteData Metoda

Wysyła wiadomość WebSocket do pojedynczego klienta identyfikowanego przez jego GUID połączenia, kierując ramkę przez serwer zapasowy, który jest właścicielem sesji.

Przeciążenia

Przeciążenie 1

Składnia

function WriteData(const aGuid, aMessage: string): Boolean;

Parametry

NazwaTypOpis
aGuidconst stringIdentyfikator docelowego połączenia przypisany przez serwer kopii zapasowej po zakończeniu uzgadniania klienta.
aMessageconst stringŁadunek tekstowy dostarczany do tego klienta jako ramka tekstowa WebSocket.

Wartość zwracana

True gdy połączenie z danym identyfikatorem GUID zostało znalezione na zarejestrowanym serwerze zapasowym i ramka została do niego przekazana; False gdy nigdzie w klastrze nie istnieje pasujące aktywne połączenie. (Boolean)

Uwagi

To przeciążenie prosi moduł równoważenia obciążenia o zlokalizowanie serwera zapasowego będącego właścicielem połączenia WebSocket, którego GUID odpowiada aGuid, i przekazuje wiadomość tekstową do tego jednego klienta. GUID to wartość udostępniana przez TsgcWSConnection.Guid, zazwyczaj przechwytywana w OnConnect i przechowywana przez aplikację. Kwalifikują się tylko zaktualizowane sesje WebSocket; identyfikatory GUID należące do czystych żądań HTTP są odrzucane i zwracane jest False. Gdy QueueOptions.Text jest ustawiony na wartość inną niż qmNone, ramka jest kolejkowana i wysyłana z wątku połączenia zamiast wątku wywołującego (nieobsługiwane, gdy IOHandlerOptions.IOHandlerType = iohIOCP). Użyj Broadcast, aby jednym wywołaniem dotrzeć do każdego aktywnego klienta w klastrze.

Przykład


oServer.WriteData('guid', 'My First sgcWebSockets Message!.');

Przeciążenie 2

Składnia

function WriteData(const aGuid: String; aStream: TStream; aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone) : Boolean;

Parametry

NazwaTypOpis
aGuidconst StringIdentyfikator docelowego połączenia przypisany przez serwer kopii zapasowej po zakończeniu uzgadniania klienta.
aStreamTStreamStrumień źródłowy, którego zawartość jest wysyłana do klienta jako binarny ramka WebSocket. Właścicielem strumienia pozostaje wywołujący.
aSizeIntegerOpcjonalny rozmiar fragmentu w bajtach; gdy jest większy od zera, strumień jest dzielony na wiele fragmentów o tym rozmiarze. Wartość 0 (domyślna) powoduje wysłanie całego strumienia jako pojedynczej ramki.
aStreamingconst TwsStreamingTryb strumieniowania dla pofragmentowanej transmisji (stmNone, stmStart, stmContinue, stmFinish). Domyślnie stmNone, co wysyła kompletną, samodzielną wiadomość.

Wartość zwracana

True gdy połączenie o podanym identyfikatorze GUID zostało odnalezione na zarejestrowanym serwerze zapasowym i strumień został przekazany do jego gniazda; False gdy w żadnym miejscu klastra nie istnieje pasujące aktywne połączenie. (Boolean)

Uwagi

To przeciążenie kieruje do pojedynczego klienta WebSocket binarny ładunek odczytany z podanego strumienia, przekierowując bajty przez load balancer do serwera zapasowego będącego właścicielem sesji. Strumień jest pobierany od bieżącej pozycji, a load balancer nie przejmuje jego własności, więc wywołujący musi utrzymywać strumień przy życiu do momentu powrotu WriteData (lub, przy kolejkowaniu, do zakończenia wysyłania). Gdy właściwość QueueOptions.Binary jest ustawiona na wartość inną niż qmNone, ramka jest kolejkowana i wysyłana z wątku połączenia zamiast wątku wywołującego (nieobsługiwane gdy IOHandlerOptions.IOHandlerType = iohIOCP). Parametru aSize należy używać razem z aStreaming przy wysyłaniu bardzo dużych ładunków, które powinny być fragmentowane na wiele ramek WebSocket.

Przykład


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

Powrót do metod