Bei der ersten Arbeit mit dem HTTPAPI-Server ist es sehr häufig zu sehen, dass das OnDisconnect-Ereignis nicht sofort ausgelöst wird, wenn ein Client die Verbindung schließt. Der Grund ist, dass der HTTPAPI-Server etwas anders funktioniert als andere Server wie Indy. Im Indy-Server gibt es einen Thread für jede Verbindung und dieser Thread prüft alle x Millisekunden, ob die Verbindung aktiv ist. Der HTTPAPI-Server verwendet einen Thread-Pool, der alle Verbindungen verarbeitet und nicht prüft, ob jede Verbindung aktiv ist oder nicht.
Um benachrichtigt zu werden, wenn der Client die Verbindung schließt, nehmen Sie die folgende Konfiguration vor:
1. Wenn Sie einen TsgcWebSocketClient verwenden, setzen Sie Options.CleanDisconnect := True. Dies bedeutet, dass der Client, bevor die Verbindung geschlossen wird, versucht, eine Benachrichtigung an den Server zu senden, dass die Verbindung geschlossen wird. Wenn der Server diese Nachricht empfängt, wird das Ereignis OnDisconnect aufgerufen.
2. Für andere Trennungen besteht die einzige Lösung darin, etwas in den Socket zu schreiben; wenn es fehlschlägt, ist die Verbindung getrennt. Aktivieren Sie HeartBeat auf dem HTTPAPI-Server und setzen Sie zum Beispiel ein Intervall von 60 Sekunden und ein Timeout von 0. Diese Konfiguration bedeutet, dass alle 60 Sekunden alle Verbindungen gepingt werden, und wenn welche getrennt sind, wird das Ereignis OnDisconnect ausgelöst. Sie können einen niedrigeren Wert für HeartBeat.Interval setzen, aber setzen Sie ihn nicht zu niedrig (1 Sekunde zum Beispiel ist zu niedrig), da die Leistung des Servers beeinträchtigt wird.