2016-09-27 3 views
0

Gibt es eine Anmerkung oder etwas in Spring-Mvc, die ich etwas anrufen kann, sobald ein Client Verbindung schließt oder eine Anfrage in irgendeiner Weise storniert? Ich habe einen Ruheservice, der normalerweise sehr schnell ist, aber abhängig von Benutzereingaben für einige Sekunden gehen kann. Ich möchte die Verarbeitung auf der Serverseite abbrechen, sobald der Client die Verbindung unterbricht.Spring MVC Request Unterbrochene Hook

Ich könnte etwas implementieren, wo der Client von Zeit zu Zeit abfragen muss, um Ergebnisse zu erhalten, aber ich möchte den Prozess abbrechen, wenn der Client seinen Browser zum Beispiel schließt oder einfach eine Curl-Anfrage abbricht. Irgendwelche Haken vom Frühling hier zur Verfügung gestellt?

+0

Das ist nicht viel klingt wie ein REST-Service. – chrylis

+0

HTTP ist zustandslos, das geht nicht. Sie können jedoch prüfen, ob die TCP-Verbindung unterbrochen wurde, da TCP Stateful ist. – vtor

+0

Nun, wir müssen es nicht REST-Service nennen. Ich habe einen Prozess, der eine Minute dauern kann und der Ressourcen kostet. Wenn ein Benutzer ungeduldig ist und die Seite verlässt, möchte ich die Ressourcen zurück haben. Also brauche ich etwas, das mir sagt, ob der Client noch wartet. Aber es sollte auch mit curl arbeiten, ohne dass ein Benutzer mehrmals abfragen muss, wenn es zur richtigen Zeit fertig ist oder seine Anfrage erledigt wird. Also muss es irgendeine Art von Verbindung oder Überprüfung zwischen Client und Server geben, die ich abfangen könnte. Die Frage ist wie? –

Antwort

0

Sobald die Anfrage an den Server gesendet wurde, kann sie nicht abgebrochen werden.

Sie können eine weitere Anforderung an den Server senden, um den Vorgang des vorherigen Prozesses abzubrechen. Sie können das Ereignis js/html vor dem Unload verwenden.

können Sie mehr sehen hier

http://www.w3schools.com/tags/ev_onbeforeunload.asp

jquery beforeunload when closing (not leaving) the page?

+0

Was passiert, wenn der Benutzer einen anderen Client verwendet? Curl zum Beispiel. Es ist offen und sollte auf diese Weise verwendet werden, aber es kann durch verlorene Verbindungen oder etwas abgebrochen werden. In diesem Fall möchte ich eine spezielle Methode aufrufen, die die Backend-Operationen abbricht. –

+0

Wenn die Verbindung unterbrochen wurde, wird die Anforderung nicht an den Server gesendet. Sobald die Verbindung erreicht ist, ist der Server beendet. Es ist wichtig zu verstehen, dass http ein asynchrones Protokoll ist, die Anfragen sind nicht an andere Anfragen gebunden, jeder ist unabhängig. – reos

+0

ja aber locken zum Beispiel blockiert bis die Anfrage zurückkommt. Also, wie wartet es darauf? Wenn ich den Dienst abbringe, während ich eine curl-Anfrage ausführe, sagt er mir "connection reset by server" wenn curl erfassen kann, dass ich das auch auf dem Server machen kann und einen Thread abbrechen, in dem die Anfrage läuft, so dass sie zurückkehrt die Ressourcen. –