TsgcWebSocketClient › Metody › Ping
Wysyła ramkę ping WebSocket do serwera i powraca natychmiast, bez oczekiwania na odpowiedź pong.
procedure Ping(const aText: String = '');
| Nazwa | Typ | Opis |
|---|---|---|
aText | const String | Opcjonalny ładunek do przekazania wewnątrz ramki ping; należy podać pusty ciąg znaków, aby wysłać ping bez ładunku. |
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.
oClient.Ping('keepalive');
function Ping(aTimeout: Integer; const aText: String = '') : Boolean;
| Nazwa | Typ | Opis |
|---|---|---|
aTimeout | Integer | Maksymalny czas w milisekundach oczekiwania na odpowiedź pong przed rezygnacją. |
aText | const String | Opcjonalny ładunek do przekazania wewnątrz ramki ping; należy podać pusty ciąg znaków, aby wysłać ping bez ładunku. |
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)
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.
if not oClient.Ping(5000, 'healthcheck') then
oClient.Disconnect;