我有一個持久的http請求(在後端大量計算)。如何使用持久的http請求
目前它都是同步的,而服務器計算機,瀏覽器沒有看到輸出/結果。過了一段時間,連接斷開,瀏覽器顯示超時錯誤。
我想立即返回一些信息到瀏覽器,並等待結果。如何實現這一目標?
請注意,Java後端是同步的。所以一個解決方案需要在servlet /前端可能需要javascript請求的某些黑客 ..?
我有一個持久的http請求(在後端大量計算)。如何使用持久的http請求
目前它都是同步的,而服務器計算機,瀏覽器沒有看到輸出/結果。過了一段時間,連接斷開,瀏覽器顯示超時錯誤。
我想立即返回一些信息到瀏覽器,並等待結果。如何實現這一目標?
請注意,Java後端是同步的。所以一個解決方案需要在servlet /前端可能需要javascript請求的某些黑客 ..?
最好的解決方案是使用AJAX請求。一旦ajax請求超時,您可以使用JavaScript再次發送它(您可以顯示一些按鈕)。這可能是處理超時的最佳做法。
你可能想要使用COMET模式。這就像AJAX模式一樣,只有長時間的HTTP請求才能模擬Feed。有關詳細說明,請參見here。
基本上,你發起請求,服務器持有它,然後當它感興趣的時候回覆。在收到答覆時,您立即開始另一個長期請求。
這個時間序列使它感覺像一個飼料。
就你而言,它可能會立即返回「是啊,我正在處理它」,然後回覆「仍然處理完10%的傢伙」等等,直到你回到「完成」爲止。
像node.js這樣的東西真的很擅長實現這種功能。
儘管在使用同步Java後端時,您可能需要某種跡象表明進展正在進行。可能是一個數據庫。
只要你寫輸出流的東西(它甚至可以是空格,不要忘了叫flush()
)就不會出現超時。
這樣的持久請求會讓你感覺很舒服,例如打印一個大的報告,隨後在用戶生成時顯示給用戶。
在所有其他情況下,將等待頁面返回給用戶並使用定期AJAX請求詢問處理是否已完成。當沒有任何變化,瀏覽器顯示加載時,這不是一個好的用戶體驗。
第一個請求必須是一個同步調用(我發送一個html表單)。 – 2013-05-14 11:42:59
@RoaySpol你可以隨時等待你的AJAX請求完成 – 2013-05-14 11:44:56