2016-09-27 54 views
0

spring-mvc中是否有註釋或者什麼讓我在客戶端關閉連接或以任何方式取消請求時立即調用某些東西?我得到了一個通常非常快速的休息服務,但可以依賴於用戶輸入進行幾秒鐘。一旦客戶端斷開連接,我想取消服務器端的處理。Spring MVC請求中斷掛鉤

我可以實現客戶端必須不時輪詢以獲取結果的一些東西,但是當客戶端關閉其瀏覽器或取消一個curl請求時,我想取消這個過程。在這裏提供的任何鉤子?

+0

這聽起來很像一個REST服務。 – chrylis

+0

HTTP是無狀態的,你不能那樣做。但是,您可以檢查TCP連接是否已被中斷,因爲TCP是有狀態的。 – vtor

+0

那麼我們不需要稱之爲REST服務。我有一個過程,可能需要一分鐘,並花費資源。如果用戶不耐煩並且通過離開一邊取消我希望有資源回來。所以我需要一些告訴我客戶是否還在等待的東西。但它也應該與curl一起工作,而不需要用戶輪詢幾次,如果它在正確的時間完成或者他的請求被殺死了。 因此,我應該能夠攔截的客戶端和服務器之間必須存在某種連接或檢查類型。問題是如何? –

回答

0

一旦請求被髮送到服務器,它不能被取消。

您可以向服務器發送另一個取消上一個過程的請求。您可以在ununload之前使用js/html事件。

你可以看到更多在這裏

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

jquery beforeunload when closing (not leaving) the page?

+0

如果用戶使用另一個客戶端會發生什麼?例如捲曲。它的開放性和應該以這種方式使用,但它可能會被丟失的連接或其他東西取消。在這種情況下,我想調用一個特殊的方法來取消後端操作。 –

+0

如果連接丟失,請求永遠不會到達服務器。一旦連接到達服務器就結束了。瞭解http是一個異步協議很重要,請求不會附加到其他請求,每個請求都是獨立的。 – reos

+0

是的,但是例如阻塞,直到請求返回。那麼它如何等待呢?如果我在運行curl請求時終止服務,它會告訴我「通過服務器重置連接」,如果curl可以捕獲到我應該可以在服務器上執行此操作,並取消請求正在運行的線程,資源。 –