2014-02-26 72 views
0

我有一個場景,我的rails控制器操作必須向後臺業務邏輯服務器發出API請求,後臺業務邏輯服務器執行大量計算並返回結果。等待HTTP請求在rails控制器中完成

我想顯示加載頁面的用戶和使用王菲或任何其他選項進行調用異步和重定向用戶的呼叫完成時..

但是,即使我打這個電話異步,HTTP請求需要等待服務器在處理後返回數據,這將需要大約20秒。

我想知道在rails中進行這種調用的最佳方式是什麼?

回答

2

我曾遇到過類似的情況,下面是我所走的路線:

  1. 當控制器動作被觸發 一個。我使用worker(我使用sidekiq) b向API發出'異步'請求。裝載在一個模態

  2. 工人處理API請求的頂部上的「AJAX」微調的gif運行在另一個線程是同步和當處理完成等待來自API

  3. 結果,工作人員通過'Faye'發出通知,消除模式並填充數據。

+0

所以基本上,你說要排隊的過程。但排隊有一個延遲,我們不能讓這個過程立即開始,而是在後臺運行。我知道這取決於進程線程。只是想知道是否有更好的方法,因爲我不能讓用戶等待多個請求。 – aBadAssCowboy

+0

@SriVishnuTotakura你可以使用類似sidekiq的東西,並給予你在做這些計算的隊列的最高優先級。此外,您可以更改sidekiq的輪詢間隔(每個隊列之間的時間檢查redis中的新作業),以便您的工作幾乎立即開始。 – avlazarov

+0

Oki。但另一個疑問是,我必須調用另一臺服務器來處理數據,可能需要20秒或更長時間才能響應。後臺工作人員的HTTP請求是否會長期存在?會導致我應該知道的應用程序中的任何問題..? – aBadAssCowboy

0

返回與狀態202 Accepted HTTP響應(對於那些需要長期採取處理請求),並開始做AJAX請求(一個URL,例如/工作/ 1)檢查後臺作業的狀態。一旦你的工作完成,更新它的狀態,以便你的Javascript(AJAX)可以處理這個後臺作業的結果。