2011-12-30 102 views
0

我注意到,在一個標準的grails環境中,即使客戶端連接丟失且結果無法再傳遞,總是執行一個請求到最後。當客戶端連接丟失時取消請求

有沒有一種方法來配置環境,使客戶端連接一旦丟失就立即取消請求的執行?

更新:感謝您的答覆。是 - 大多數的我試圖避免的問題,可以通過更好的編碼來避免:

  • 緩存可以使幾乎每一個頁面快速
  • 令牌可以幫助避免提交的東西兩次

但有一些請求仍然會消耗一些時間。以地圖服務爲例。計算路線需要一些時間。避免重新提交請求的一種解決方案可能是「計算進度」標記以及給用戶的消息。但是,然後仍然有可能創建大量的會話,因此很多的請求,以便做DOS攻擊...

我仍然好奇:有沒有辦法配置服務器來取消請求?我曾經在服務器以這種方式運行的系統上開發,並且它很棒:-)

回答

1

可能沒有這種方式。我敢肯定的Grails(和你的Web容器)的設計

  1. 接受傳入的請求
  2. 過程中它在服務器端
  3. 發送響應

如果第2階段期間發生了一件事,我只有在發送回覆階段纔會知道它。實際上,你可以自己發送數據給HttpSerlvetRespone,處理IOException等,但是我認爲它會是太低級的方式。在準備發送數據時,它不會幫助您取消數據庫操作。

順便說一句,這是常見的模式來使用網絡前端,像nginx的,是接受進來的請求,並處理所有這些問題與取消的請求,緩慢的請求(我想這是真正的問題?)等

+0

是的,緩慢的請求是真正的問題。想象一下,搜索需要花費一些時間,一個不耐煩的用戶多次重新加載頁面,因爲她認爲這可能會有所幫助... – rdmueller 2011-12-30 07:38:12

+0

我認爲你可以通過使用Nginx和適當的緩存/ etag頭文件來處理這個問題,服務器端緩存(ehcache/memcache/etc) – 2011-12-30 07:43:33

1

根據你的評論,它是重新加載和你試圖避免多個點擊。正確的技術應該用於處理多種表單提交Grails的支持: