Ich habe einen alten Tomcat-Thread aus dem Jahr 2009 gefunden, der besagt, dass wir dies erreichen können, indem wir leere Bytes leeren (
Code: Select all
new byte[0]
Ich denke, dass ich bräuchte etwas auf der TCP-Ebene, etwa einen PING oder Keep-Alive, aber ich konnte keine Ressourcen dafür finden, wie ich das für meinen Anwendungsfall machen könnte. Die Integration von Spring für TCP scheint neue Verbindungen mit einem konfigurierten Server herzustellen, anstatt den Socket der eingehenden Anforderungen zu verwenden. Die Keep-Alive-Konfigurationen von Tomcat scheinen für die Zeitüberschreitung von Anfragen zu dienen und nicht für die Überprüfung, ob der Benutzer die Verbindung getrennt hat (ich möchte keine Zeitüberschreitung bei der Verbindung zu meinem Server erzielen).
Idealerweise Ich möchte die Konnektivität regelmäßig überprüfen, damit ich die Ressourcen früher entsperren und freigeben oder die schwere Aufgabe anhalten kann, wenn der Client nach dem Start der Aufgabe die Verbindung trennt. Aber wenn das zu schwierig ist, dann ist es auch in Ordnung, die Konnektivität kurz vor Beginn der schweren Aufgabe einmal zu überprüfen.
Bearbeiten:
@talex wies im Kommentar darauf hin, dass es unmöglich ist, den von mir vorgeschlagenen TCP-Heartbeat-Typ zu erreichen, ohne das Protokoll zu ändern. Jetzt denke ich über eine weniger robuste Prüfung nach, bei der wir prüfen, ob wir ein FIN-Paket vom Client erhalten haben, und nicht Fälle bearbeiten, in denen der Client die Verbindung abrupt trennt. Wäre dies in der Spring-Architektur umsetzbar? Ich habe eine verwandte SO-Frage gefunden, aber ihre Lösung besteht darin, den EOF zu erkennen, was in meinem Fall immer zutrifft, da Spring den Stream für mich analysiert hätte, wenn ich meinen Controller erreiche.