2016-01-04 46 views
1

我正在開發一個web應用程序。當程序切換頻道時,它會向具有舊頻道的服務器發送「關閉」AJAX請求。作爲服務器響應,應用程序只是向服務器發送一個「打開」請求來打開一個新頻道。大多數情況下,這個等待完成開放等待完成的回合運行得足夠快,但是在特殊通道的情況下,關閉需要超過5秒,這是不可接受的。有沒有一種方法可以執行fire-and-forget AJAX請求?

我已經爲這些通道的「關閉」請求設置了一個短暫的超時時間,並且它會返回,但新的「打開」請求會掛起,直到服務器響應舊的「關閉」請求,所以超時只是將問題推開。

我爲長時間關閉設置了一個setTimeout(),所以當我的程序調用「close」時,它會被延遲,新的「open」會在它之前執行,但它也只是拋出問題,當setTimeout()命中時,在後臺會有一個長的請求,它會佔用瀏覽器的ajax請求池,並且有一些運氣會導致僞隨機AJAX請求掛起。

該應用程序對「關閉」請求的結果沒有興趣,所以即使失敗,它也可以被刪除。

執行這種「即發即棄」AJAX請求的最佳做法是什麼?

(我使用Linux上Chromium瀏覽器,但應用程序應該在Firefox上運行了。)

+2

將ajax-request發送到您的服務器腳本。用serwer腳本捲曲 - 關閉。這樣你可以快速返回並且服務器端將關閉關閉。 –

+0

什麼是服務器端技術?你對此有任何控制嗎?似乎最簡單的選擇是更改「關閉」服務器端方法以產生新的線程/進程/後臺工作者並立即返回。 –

+0

是的,我有限的訪問服務器端,我可以使用JSP。 – ern0

回答

1

您可以使用servlet的3.0異步功能。您可以立即爲您的關閉請求提交響應,並啓動新線程進行進一步的服務器處理。 你可以參考下面的鏈接瞭解更多相同的信息。 http://www.javaworld.com/article/2077995/java-concurrency/asynchronous-processing-support-in-servlet-3-0.html

+0

這似乎是一個服務器端修復...它甚至不確定OP的應用程序運行在Java上。 (JS!= Java) – Katana314

+0

當我回復我看到java時,在原始問題中提到了tomcat和jsp。 – koushlendra

+0

可能它甚至不能在客戶端解決。誰知道acutal和未來的瀏覽器如何工作。我會嘗試一下,然後結束這個問題。 – ern0

相關問題