2013-07-14 63 views
0

我正在構建一個簡單形式的應用程序。您將查詢放置在多個表單元素中,然後單擊提交。查詢順序API調用狀態

這提交(相當)大量的API調用,以第三方API創建的第三方應用程序所需的對象,執行它們,然後將結果返回給我的應用程序。

該過程需要5-30秒。

我想這個做的是呈現在部分計算結果(因爲SQL IDE,像SSMS或蟾蜍或者其他 - 在頂部的輸入,下面返回結果)。我希望在該過程中的每一步之後刷新該部分,並向用戶顯示該任務的狀態。目前,該應用程序只是坐滿並旋轉,直到完成所有這些複雜的IO業務邏輯,從而導致可怕的用戶體驗。

因此,可以說,通過第三方API所採取的步驟是:

  1. 創建插件

  2. 開始小部件

  3. 顯示器部件狀態

  4. 完成後,將最終結果返回給用戶。

我想要做的是有一個變量,說@status,其中包含上述過程的當前執行。 「創建Widget ...」等等。當任務完成時,這向用戶顯示。

當這些任務中的任何一個完成時,我該如何重新渲染部分?它應該輪詢服務器嗎?我怎樣才能在沒有線程鎖定的情況下輪詢正在運行服務器端的進程,直到上述步驟完成?

目前,這是不寫入數據庫,我想盡可能地保持數據庫出這是由於負荷的限制。

現在,我知道輪詢動作的不同方法(通過jQuery的AJAX),主要是使用setinterval/timeout來調用控制器動作和重新呈現,但如果我的API調用方法被引用行動,它只是等待,直到完成任何事情。

有什麼想法?

+0

對我的文字有幫助嗎? –

回答

0

作爲草圖溶液/算法:

  • 需要一個共享的數據資源,說起默認內存緩存,雖然人們可以使用SHM等我以前經由內部插座實現這一點,但這是固定工人人口。
  • 與現在一樣,主要活動請求會發送到您的服務器。
    • 服務器創建一個memcache句柄。
    • 返回對客戶端的引用(快速)。
  • 客戶端事件循環在POST上啓動(通過jQuery AJAX猜測)。
    • 每個X,都會針對當前請求狀態(JSON?)輪詢服務器。
    • 用戶界面已更新。
    • 服務器完成第三方操作。
    • 下一輪投票將返回更多信息(結果)。
    • 服務器銷燬memcache句柄。
  • 添加的中止按鈕

的更新可以被建模爲:

  • 日誌項(如syslogd的輸出)。
  • 事件(如winlog版本的syslog)。
  • 更新文本緩衝區輸出。