클라이언트가 서버에 연결한 후, 때때로 신호 불량, 연결 오류 등으로 인해 연결이 닫힐 수 있습니다. 연결을 활성 상태로 유지하는 데 도움이 되는 2개의 속성이 있습니다.
HeartBeat 속성을 사용하면 연결을 활성 상태로 유지하기 위해 X 초마다 Ping을 보낼 수 있습니다. 일부 서버는 피어 간에 데이터 교환이 없으면 TCP 연결을 닫습니다. HeartBeat는 특정 간격으로 ping을 보내 이 문제를 해결합니다. 일반적으로 이것으로 연결을 활성 상태로 유지하기에 충분하지만, X초 후에 서버로부터 응답을 받지 못할 때 연결을 닫으려면 TimeOut 간격을 설정할 수 있습니다.
예제: 30초마다 ping 보내기
oClient := TsgcWebSocketClient.Create(nil);
oClient.HeartBeat.Interval := 30;
oClient.HeartBeat.Timeout := 0;
oClient.HeartBeat.Enabled := true;
oClient.Active := true;
OnBeforeHeartBeat이라는 이벤트가 있어 HeartBeat 동작을 사용자 정의할 수 있습니다. 기본적으로 HeartBeat이 활성화되어 있으면, 클라이언트는 HeartBeat.Interval 속성으로 설정된 대로 X초마다 WebSocket ping을 보냅니다.
OnBeforeHeartBeat에는 Handled라는 매개변수가 있으며, 기본적으로 false입니다. 이는 흐름이 TsgcWebSocketClient 구성 요소에 의해 제어됨을 의미합니다. 값을 True로 설정하면 ping이 전송되지 않으며, Connection 클래스를 사용하여 사용자 정의 메시지를 보낼 수 있습니다.
WatchDog가 활성화된 경우, 클라이언트가 연결 끊김을 감지하면 WatchDog는 연결이 다시 활성화될 때까지 X초마다 재연결을 시도합니다.
예: 연결 해제 후 무제한 시도로 10초마다 재연결합니다.
oClient := TsgcWebSocketClient.Create(nil);
oClient.WatchDog.Interval := 10;
oClient.WatchDog.Attempts := 0;
oClient.WatchDog.Enabled := true;
oClient.Active := true;
클라이언트가 연결을 시도할 서버를 변경하기 위해 OnBeforeWatchDog 이벤트를 사용할 수 있습니다. 예: 3번 재시도 후 클라이언트가 서버에 연결할 수 없으면 보조 서버에 연결을 시도합니다.
Handled 속성이 True로 설정되면 클라이언트가 재연결을 시도하지 않음을 의미합니다.