簡體   English   中英

如何解決在PHP后端未同時執行的Ajax調用的問題?

[英]How to troubleshoot ajax calls not being executed simultaneously in PHP backend?

我正在開發一個Web應用程序,該應用程序需要使用SOAP從Web服務中調用函數。

我已經編寫了一個簡單的PHP后端以訪問SOAP函數。 后端主要由帶有靜態“ helper”方法的類組成(我僅在需要時使用__autoload()加載類)。

在應用程序的某個時刻,我需要同時調用兩個SOAP函數。 由於我想加快處理過程,因此我使用了兩個同時的ajax調用。

問題是,這些調用並非總是同時運行。 請求是在同一時間發送的,但是第二個呼叫的持續時間比第一個呼叫的持續時間長(它們應該具有大致相同的運行時間)。 如果第一個通話持續600毫秒,第二個通話持續1400-1600毫秒。

我已經設置了一個簡單的測試,在該測試中,我首先並行調用兩個函數,然后在兩個請求完成后依次調用另一個函數。

請求測試,通話時間更長

我曾嘗試對PHP端進行性能分析(都使用microtime()和xdebug),但是我一直發現,這些調用在PHP上具有相同的執行時間(大約500毫秒)。

但是,真正使我發瘋的是事實,就是相同的代碼似乎以隨機的方式工作和破壞。 有時我會重新加載頁面,並且調用會同時執行。 然后,我再次重新加載,第二次通話又花了更長的時間。

請求測試並獲得預期結果

PHP會話鎖定應該不是問題,我僅在需要時打開會話,然后再使用session_write_close()將其關閉。

由php后端調用的SOAP服務器支持多個連接,並且除了我的microtime()分析外,我還需要大約400毫秒才能完成SOAP請求,因此我不認為應該歸咎於Web服務。

在客戶端,請求是同時發送的。 我嘗試將第二次通話稍加延遲,但無濟於事。

但是話又說回來,這種“隨機”行為令我感到困惑。 我已經在本地(WAMP)和兩個不同的服務器(共享主機)上測試了該應用程序。 在所有環境中,都使用PHP 5.5。

是什么導致這種差異,並且如果行為不是100%一致的,又該如何解決該問題?

我解決了這個謎。

在我的本地環境中,禁用xdebug后,ajax調用可以完美並行地運行。

在遠程環境中,我仍然遇到相同的問題(根本沒有xdebug)。 因此,首先,我嘗試對PHP腳本使用單個AJAX調用,該腳本使用curl_multi_exec()並行運行SOAP請求,基本上是類似的設置,但主要是服務器端的。

我發現使用這種技術在時間上也有相同的差異,並且模式非常相似。

我已經聯系了托管服務提供商並解釋了我的問題,他們告訴我,這可能是由於共享環境的資源有限,具體取決於整體負載。

因此,最后雖然可以實現此行為,但在我的特定情況下,我不得不更改策略並使用兩個串行AJAX調用,在第一個調用之后更新視圖以給人以更快的響應印象,同時等待第二個調用去完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM