2012-02-07 45 views
0

所以,我創建這個應用程序,有時它需要拉動飼料,它總是在Heroku上超時,因爲XML解析器需要時間。所以,每次頁面加載時,我都會通過Ajax更改爲異步加載。我仍然從我的Ajax調用中獲得H12錯誤。現在我正在考慮使用Resque在後臺運行作業。我可以做到這一點沒有問題,但我怎麼知道這項工作已經完成,所以我可以通過AJAX將處理後的feed拉到html頁面上?後臺作業如何在網絡知道它的完成

不知道如果我的問題是清楚的,因此如何將網絡層知道作業完成,其應e.g(的onComplete在JavaScript)來填充網頁上的內容?

+1

不具體到Heroku的,但你可能會感興趣的書面記錄我的[使用DRb如下長時間運行的網絡程序的服務器]由(HTTP:/ /phrogz.net/drb-server-for-long-running-web-processes)。它演示瞭如何使用AJAX來輪詢和返回在另一個線程中運行的進程的結果。 – Phrogz 2012-02-08 15:33:22

回答

4

有許多方法可以做到這

  • 中的JavaScript可以使用AJAX輪詢服務器請求的結果,服務器可以用「沒有」或結果作出迴應。你一直問,直到你得到結果。

  • 你可以看看劍聖(http://juggernaut.rubyforge.org/),它可以讓你的服務器推到客戶端

  • 網絡套接字是HTML5的方式來處理這個問題。有幾個寶石周圍,讓你開始Best Ruby on Rails WebSocket tool

1

您在這裏有一個結構問題。 H12的原因是,用戶沒有坐在那裏超過30秒。

通過將長時間運行的任務移動到Resque隊列中,您正在使其與前端Web進程斷開連接 - 由於進程隔離,兩者無法通信。

因此,你需要看你在做什麼,以及如何。舉例來說,如果你是拉飼料,你可以在某些時候,用戶需要看到輸出和高速緩存以某種方式結果之前做到這一點 - 或者是你能夠採取請求來自用戶的飼料,然後給他們發電子郵件,當他們有數據讓他們看等等等等。

您在這裏遇到的問題是您的用戶需要花費比合理的時間長的時間才能完成,因此您需要仔細看看你在做什麼和如何做。

相關問題