Ich habe eine Client / Server-Anwendung mit der IdTCPServer-Komponente erstellt. Die Clients verbinden und pflegen eine dauerhafte Verbindung über die Lebensdauer der Anwendung. Wenn die Netzwerkverbindung unterbrochen wird (was häufig passiert, weil Clients eine Verbindung mit drahtlosen Aircards herstellen), stellt der Client automatisch eine Verbindung her. Das alles funktioniert gut.
Mein Problem betrifft die Sockets auf dem Server, die der verlorenen Verbindung entsprechen. Sie erkennen den Netzwerkausfall nicht und trennen sich selbst. Nachdem ich mehrere verwandte Artikel gelesen habe, habe ich gelernt, dass der Server nicht wissen kann, ob eine Verbindung unterbrochen wurde. Es muss auf ein Ereignis warten, um dies herauszufinden.
Also meine Frage ist, sollte ich einen Mechanismus in meinem Server bauen, um die Sockets mit unterbrochenen Verbindungen regelmäßig zu "behandeln"? Und wenn ja, wie? Ich dachte, ein Weg wäre, alle Verbindungen zu durchlaufen und zu versuchen, ihnen Daten zu senden. Ich finde, dass dies das benötigte "Ereignis" auslösen wird.
Eine Art von Heartbeat- oder Ping-Signal, das in regelmäßigen Abständen vom Client zum Server gesendet wird, könnte verwendet werden, um die serverseitige Sitzung am Leben zu erhalten. Wenn das Signal stoppt und ein Zeitüberschreitungsintervall verstreicht, kann der Server annehmen, dass der Client die Verbindung verloren hat.
(Wenn der Server einfach die Socket-Verbindung verwendet, um Daten zurück an den Client zu senden, kann der Server nicht wissen, ob der Client sie empfangen hat. Die Daten befinden sich möglicherweise in der Mitte.)