TsgcWebSocketClient › Metody › Ping

Ping Metoda

Wysyła ramkę ping WebSocket do serwera i powraca natychmiast, bez oczekiwania na odpowiedź pong.

Przeciążenia

Przeciążenie 1

Składnia

procedure Ping(const aText: String = '');

Parametry

NazwaTypOpis
aTextconst StringOpcjonalny ładunek do przekazania wewnątrz ramki ping; należy podać pusty ciąg znaków, aby wysłać ping bez ładunku.

Uwagi

To przeciążenie wysyła ping i natychmiast wraca, nie blokując wywołującego ani nie czekając na odpowiedź pong. Gdy klient nie ma połączenia, nic nie jest wysyłane, a błąd jest zgłaszany przez OnError z Connection = nil i komunikatem Data not sent, the client is not connected or its handshake has not completed. Zdarzenie jest wywoływane w wątku wywołującym, zanim Ping zwróci sterowanie, i do wywołującego nie jest zgłaszany żaden wyjątek. Ustaw Options.RaiseDisconnectExceptions na False, aby pominąć to zgłoszenie. Ping wysłany, zanim zakończy się handshake WebSocket, nie jest zgłaszany jako błąd, ponieważ HeartBeat wysyła pingi tą samą metodą. Każdy pong odebrany od serwera jest dostarczany asynchronicznie przez standardowe zdarzenia połączenia. Wewnętrznie wyjątki są przechwytywane i przekazywane do OnError. Należy użyć przeciążenia z limitem czasu drugiego przeciążenia, gdy wymagane jest potwierdzenie, że partner jest nadal osiągalny.

Przykład


oClient.Ping('keepalive');

Przeciążenie 2

Składnia

function Ping(aTimeout: Integer; const aText: String = '') : Boolean;

Parametry

NazwaTypOpis
aTimeoutIntegerMaksymalny czas w milisekundach oczekiwania na odpowiedź pong przed rezygnacją.
aTextconst StringOpcjonalny ładunek do przekazania wewnątrz ramki ping; należy podać pusty ciąg znaków, aby wysłać ping bez ładunku.

Wartość zwracana

True jeśli serwer odpowiedział pasującym pongiem w oknie limitu czasu; False w przeciwnym razie. Gdy zwrócono False, klient może zdecydować się zamknąć połączenie, ponieważ peer jest uznawany za nieosiągalny. (Boolean)

Uwagi

To przeciążenie blokuje wątek wywołujący do momentu nadejścia pong lub upłynięcia limitu czasu, co jest przydatne do interaktywnych kontroli żywotności. Metoda zwraca False natychmiast, gdy klient nie ma połączenia, i zgłasza to przez OnError z Connection = nil, tak jak opisano dla innego przeciążenia. Wyjątki zgłoszone przez bazowe gniazdo są przechwytywane i przekazywane do OnError. Aby wysłać ping bez blokowania, należy użyć bezparametrowego drugiego przeciążenia.

Przykład


if not oClient.Ping(5000, 'healthcheck') then
  oClient.Disconnect;

Powrót do metod