TsgcWebSocketClient | Dropped Disconnections

연결이 설정된 후 피어가 데이터를 보내지 않으면 네트워크를 통해 패킷이 전송되지 않습니다. TCP는 유휴 프로토콜이므로 연결이 여전히 활성 상태라고 가정합니다.

연결 끊김 사유

 

Half-Open 연결 끊김 감지

다음 메서드를 사용하여 연결 끊김을 감지하려고 시도할 수 있습니다

두 번째 연결

두 번째 연결을 열고 연결을 시도할 수 있지만, 여기에는 몇 가지 단점이 있습니다: 더 많은 리소스를 소비하고, 새 스레드를 생성하는 등. 또한 다른 피어가 재부팅된 경우 두 번째 연결은 작동하지만 첫 번째 연결은 작동하지 않습니다.

다른 피어 ping

half-open 연결로 ping 또는 어떤 메시지를 보내려고 하면 아무런 오류도 발생하지 않는 것을 볼 수 있습니다.

 

TCP Socket 수준에서 KeepAlive 활성화

TCP keep-alive 패킷은 단순히 시퀀스 번호가 연결의 현재 시퀀스 번호보다 1 작게 설정된 ACK입니다. 이러한 ACK 중 하나를 수신하는 호스트는 현재 시퀀스 번호에 대한 ACK로 응답합니다. Keep-alive는 연결의 원격 끝에 있는 컴퓨터가 여전히 사용 가능한지 확인하는 데 사용할 수 있습니다. TCP keep-alive는 다른 데이터나 상위 수준 keep-alive가 TCP 연결을 통해 전달되지 않은 경우 TCPKeepAlive.Time(기본값 7,200,000밀리초 또는 2시간)마다 한 번씩 전송될 수 있습니다. keep-alive에 대한 응답이 없으면 TCPKeepAlive.Interval초마다 한 번씩 반복됩니다. KeepAliveInterval은 기본적으로 1000밀리초입니다.

 

연결별 KeepAlive를 활성화하고 TCP 프로토콜이 연결이 활성 상태인지 여부를 확인하도록 허용할 수 있습니다. 끊긴 연결을 감지하려는 경우 (예: 네트워크 케이블을 뽑을 때) 이것이 선호되는 방법입니다.

 


oClient := TsgcWebSocketClient.Create(nil);
oClient.TCPKeepAlive.Enabled := True;
oClient.TCPKeepAlive.Time := 5000;
oClient.TCPKeepAlive.Interval := 1000;