HTTPAPI Sunucusuyla ilk kez çalışırken, bir istemci bağlantıyı kapattığında OnDisconnect olayının hemen tetiklenmediğini görmek çok yaygındır. Bunun nedeni, HTTPAPI Sunucusunun Indy gibi diğer sunuculardan biraz farklı çalışmasıdır. Indy sunucusunda her bağlantı için bir iş parçacığı vardır ve bu iş parçacığı her x milisaniyede bir bağlantının etkin olup olmadığını kontrol eder. HTTPAPI Sunucusu tüm bağlantıları işleyen bir iş parçacığı havuzu kullanır ve her bağlantı için etkin olup olmadığını kontrol etmez.
İstemci bağlantıyı kapattığında bildirim almak için aşağıdaki yapılandırmayı yapın:
1. Bir TsgcWebSocketClient kullanıyorsanız, Options.CleanDisconnect := True ayarlayın. Bu, bağlantı kapatılmadan önce istemcinin sunucuya bağlantının kapatılacağına dair bir bildirim göndermeye çalışacağı anlamına gelir. Sunucu bu mesajı alırsa, OnDisconnect olayı çağrılır.
2. Diğer bağlantı kesilmeleri için tek çözüm sokete bir şeyler yazmaktır; başarısız olursa, bağlantı kesilmiştir. HTTPAPI sunucusunda HeartBeat'i etkinleştirin ve örneğin 60 saniyelik bir aralık ve 0 zaman aşımı ayarlayın. Bu yapılandırma, her 60 saniyede bir tüm bağlantıların ping'leneceği ve herhangi biri bağlantısı kesilmişse OnDisconnect olayının tetikleneceği anlamına gelir. HeartBeat.Interval'a daha düşük bir değer koyabilirsiniz, ancak çok düşük ayarlamayın (örneğin 1 saniye çok düşüktür) çünkü sunucunun performansı etkilenecektir.