TsgcWebSocketClient | Utrzymywanie połączenia otwartego

Po nawiązaniu połączenia klienta z serwerem połączenie może niekiedy zostać zerwane z powodu słabego sygnału, błędów połączenia itp. Dostępne są 2 właściwości pomagające utrzymać aktywne połączenie.

 

HeartBeat

HeartBeat to właściwość umożliwiająca wysyłanie sygnału Ping co X sekund, aby utrzymać połączenie aktywne. Niektóre serwery zamykają połączenia TCP, gdy między partnerami nie są wymieniane żadne dane. HeartBeat rozwiązuje ten problem, wysyłając ping w określonym interwale. Zazwyczaj jest to wystarczające do utrzymania aktywnego połączenia, ale można ustawić interwał TimeOut, jeśli połączenie ma być zamykane, gdy odpowiedź serwera nie zostanie odebrana po X sekundach.

 

Przykład: wysyłanie pinga co 30 sekund


oClient := TsgcWebSocketClient.Create(nil);
oClient.HeartBeat.Interval := 30;
oClient.HeartBeat.Timeout := 0;
oClient.HeartBeat.Enabled := true;
oClient.Active := true;

Istnieje zdarzenie o nazwie OnBeforeHeartBeat, które umożliwia dostosowanie zachowania HeartBeat. Domyślnie, jeśli HeartBeat jest włączony, klient wysyła ping WebSocket co X sekund zgodnie z wartością właściwości HeartBeat.Interval.

OnBeforeHeartBeat posiada parametr o nazwie Handled, domyślnie ustawiony na false, co oznacza, że przebieg jest kontrolowany przez komponent TsgcWebSocketClient. Ustawienie tej wartości na True powoduje, że ping nie zostanie wysłany, a zamiast tego można wysłać własną wiadomość przy użyciu klasy Connection.

 

WatchDog

Jeśli WatchDog jest włączony, gdy klient wykryje rozłączenie, WatchDog próbuje ponownie nawiązać połączenie co X sekund, dopóki połączenie nie będzie ponownie aktywne.

 

Przykład: ponowne połączenie co 10 sekund po rozłączeniu z nieograniczoną liczbą prób.

 


oClient := TsgcWebSocketClient.Create(nil);
oClient.WatchDog.Interval := 10;
oClient.WatchDog.Attempts := 0;
oClient.WatchDog.Enabled := true;
oClient.Active := true;

Zdarzenia OnBeforeWatchDog można użyć do zmiany serwera, z którym klient spróbuje nawiązać połączenie. Przykład: po 3 próbach, jeśli klient nie może połączyć się z serwerem, podejmie próbę połączenia z serwerem zapasowym.

Właściwość Handled, jeśli ustawiona na True, oznacza, że klient nie będzie próbował ponownie nawiązać połączenia.