HTTPAPI Server를 처음 사용할 때 클라이언트가 연결을 닫을 때 OnDisconnect 이벤트가 즉시 발생하지 않는 것을 보는 것은 매우 일반적입니다. 그 이유는 HTTPAPI Server가 Indy와 같은 다른 서버와 약간 다르게 작동하기 때문입니다. Indy 서버에는 모든 연결에 대한 스레드가 있으며 이 스레드는 x 밀리초마다 연결이 활성 상태인지 확인합니다. HTTPAPI Server는 모든 연결을 처리하는 스레드 풀을 사용하며 모든 연결에 대해 활성 상태인지 여부를 확인하지 않습니다.
클라이언트가 연결을 닫을 때 알림을 받으려면, 다음 구성을 수행하십시오:
1. TsgcWebSocketClient를 사용하는 경우, Options.CleanDisconnect := True로 설정하십시오. 이는 연결이 닫히기 전에 클라이언트가 연결이 닫힐 것이라는 알림을 서버에 보내려고 시도함을 의미합니다. 서버가 이 메시지를 수신하면 OnDisconnect 이벤트가 호출됩니다.
2. 다른 연결 끊김의 경우 유일한 해결책은 소켓에 무언가를 쓰는 것입니다. 실패하면 연결이 끊어집니다. HTTPAPI 서버에서 HeartBeat를 활성화하고, 예를 들어 60초의 간격과 0의 시간 초과를 설정하십시오. 이 구성은 60초마다 모든 연결에 ping을 보내고, 연결이 끊어진 연결이 있으면 OnDisconnect 이벤트가 발생함을 의미합니다. HeartBeat.Interval에 더 낮은 값을 넣을 수 있지만, 너무 낮게 설정하지 마십시오(예를 들어 1초는 너무 낮음). 서버의 성능이 영향을 받기 때문입니다.