2009-08-06 12 views
0

我有一個腳本,當前有一個步驟,在客戶註冊後觸發語音廣播。這是一個名爲callfire的nusoap。從php中關閉nusoap,不要等待結果

的潛伏期有相當高的,而且它增加了大約2秒鐘,我的亞秒級的註冊過程。因此,我有人不止一次地點擊註冊按鈕。

有沒有辦法告訴應用等不到結果,只是繼續前進?

有可能通過將所有的Nu​​SOAP代碼在一個單獨的文件中作弊,然後打開一個套接字到該文件,但我正在尋找一個更清潔的方式。

或者有沒有辦法發射一個功能,而不是等待結果?我不認爲有。

回答

1

您可以將代碼移至cli腳本。從Web服務器PHP線程運行cli腳本。然後CLI進程分叉,父進程退出。 Web線程可以繼續,CLI子進程可以註冊用戶。

在SOAP調用失敗的情況下,我建議您將數據存儲在某處並將其刪除或將其標記爲完成一次即可成功。您可以定期檢查cron作業以查看是否有呼叫失敗,然後重試,然後通知某人(管理員,用戶)。

0

如果你有一定的作用,這只是必須有「很快」,而不是「馬上」,然後將其添加到某種類型的隊列(例如數據庫表)。

接下來,有一個cron作業沿着每一分鐘來左右和執行在這個隊列中的任務。

0

據我所知,沒有辦法直接斷火的功能和移動過去,它在執行鏈......但也有一些很酷的/簡單的解決方案:

  • 正如你提到的,把代碼放在一個單獨的文件中,然後將它解僱......儘管我只是使用shell_exec命令來運行它,並禁用它,所以它在後臺運行
  • 按照Paul提到的創建隊列
  • 看看像齒輪人(http://www.danga.com/gearman/)... Digg寫了一些不錯的PEAR庫與它一起工作。 Gearman的可能是一個有點矯枉過正,但它太酷何況:)
0

您不妨考慮一下從瀏覽器做一些Ajax請求:在

  • 他將被重定向到一個

    • 用戶登錄這確實SOAP調用

    頁(他的賬戶頁面,例如)

  • 在該網頁上,有一個Ajax調用PHP腳本的服務器上,這是一個您經常會聽到的想法,我認爲...但它需要用戶啓用JavaScript,並且可能不會總是很好(如果用戶在Ajax請求完成之前離開頁面,該怎麼辦? )

    恕我直言,最好(更安全,永遠是可行的,不依賴於客戶端上,...)方式真的會用一些請求隊列,像Paul suggested
    這就是我選擇的解決方案。

    但是,當然,它增加了用戶在簽名和請求被髮送的時間之間有一些延遲...但它是壞?