2012-07-20 140 views
0

我有一個調用一個PHP腳本,可以與我們的CRM的API進行交互,像這樣一個註冊表格:終止與jQuery AJAX請求的連接,繼續在服務器端處理php?

CRM API < - > PHP腳本< - >註冊表格

  1. 的註冊表格通過在一個 AJAX調用
  2. PHP腳本的一些信息到PHP腳本運行十幾個API調用到CRM創建 一個帳戶,並連接各種數據
  3. 的CRM返回新的帳戶ID,它只是創造d到PHP腳本
  4. PHP腳本將帳戶ID傳遞迴註冊表單,此時AJAX調用已完成,並且註冊表單可以繼續。

的問題是#2,那些十幾個電話約需20秒才能完成,但因此它在理論上可以更快返回數據,並完成其餘的註冊表格所需要的數據是第一API調用後產生的東西服務器端沒有拿着AJAX調用打開整個時間。

我試過flush()和ob_flush(),它在處理完成之前向客戶端輸出帳戶ID,但jQuery AJAX連接保持打開狀態,所以我仍然堅持等待連接在註冊表單上關閉在發生任何事情之前。

那麼,儘可能快地將該帳戶ID返回到表單最簡單的路線是什麼?

使用curl和exec可能爆發嗎?

if(signing up){ 
     stuff 
     exec(curl myself, notsignup) 
} 
else { 
     bunch of api calls 
} 

回答

1

您應該考慮爲剩下的步驟創建一個獨立的進程。一種方法是,你可以在#1的第一個API調用完成之後。它迴應用戶,並且不嘗試在用戶端完成20個呼叫的其餘部分。

然後創建一個隊列來完成剩下的工作。你總是可以在mysql中創建一個表來存儲隊列。

接下來,只需創建一個將在後臺運行的cronjob,敲出隊列。

注意:您不希望此cronjob剛剛啓動並且從不停止。也許它每5分鐘運行一次,但在它開始運行之前,檢查是否還有其他cron正在運行。如果是,那麼它會在5分鐘後檢查是否可以運行。

希望這會有所幫助!

+0

我結束了去捲曲路由,因爲它更快,並得到它的工作現在。不過,我認爲隊列和cronjob來處理它們是最好的長期解決方案。 Curl給我買了一些時間,所以我會盡快實現你的答案。感謝Richard! – xref 2012-07-23 16:30:15

+0

我的快樂.... – RichardW11 2012-08-03 12:33:28

1

如果您只需要在第一個API調用的返回信息的形式,那麼我可能會嘗試不同的工作流程:

  1. 表單調用PHP腳本
  2. PHP調用第一API調用
  3. PHP返回到窗體
  4. 表格處理響應
  5. 表單調用第二個PHP腳本來完成此過程
  6. PHP完成API調用(此時表單可以放棄,因爲它聽起來像你不在乎從這裏出來會發生什麼)。

工作流程需要開發人員多一點工作和協調,但向用戶展示了響應速度最快的界面。

+0

我擔心這種方法的用戶在處理過程中關閉窗體選項卡將導致問題,並留下客戶關係管理只有一半填充或有問題... – xref 2012-07-23 16:28:29