我從某些Web服務獲取信息,但我希望我調用的方法只是異步的,因爲請求時間太長,以致網站加載速度變慢。PHP中的異步網絡服務
我目前使用正常的SOAP調用
$client = new SoapClient("http://xxxx.com/webservices/json.asmx?WSDL");
$result = $client->__soapCall($id, $parameters);
有人可以幫我請
我從某些Web服務獲取信息,但我希望我調用的方法只是異步的,因爲請求時間太長,以致網站加載速度變慢。PHP中的異步網絡服務
我目前使用正常的SOAP調用
$client = new SoapClient("http://xxxx.com/webservices/json.asmx?WSDL");
$result = $client->__soapCall($id, $parameters);
有人可以幫我請
這種正常的做法是不是隻在服務器端異步的策略,因爲這不符合php的工作原理,而是應用這種策略:
您處理請求並將HTML頁面響應給客戶端,該客戶端具有緩慢API調用結果的容器元素,但容器留空或者包含一個佔位符,另外一個客戶端邏輯被提供,所以javascript,它向客戶端的文檔就緒事件註冊一個處理程序,在這個處理程序中,它發出一個jax請求回到服務器,通常每個API調用都需要執行一個請求。在ajax請求中收到的有效負載用於使用最終數據填充html內的容器。
通過這種方式,頁面/視圖本身的生成和呈現與完全等待API調用分離。此外,策略是透明的,用戶可以看到額外的數據被提取出來,這使得等待期從心理學的角度來看更加可以接受。
您可以想到該策略的一種變體,它已經註冊了基於服務器的作業,執行實際的API調用並緩存結果。這樣你就可以保持發送頁面的雙向延遲,並等待ajax調用進來。然而,這裏面臨的挑戰是保持這些作業與原始請求之間的連接,其後續的ajax調用不是一個簡單的任務。通常,這種優勢根本無法證明額外的努力。
所以作爲底線可以說,通常在純php中沒有異步策略被實現。相反,原始請求被分成幾個獨立的請求。只有第一個請求被立即處理和響應,獨立於任何緩慢的API調用。然後,並行地,ajax請求觸發API調用並將結果信息添加到對第一個請求的響應中。
異步 - 它不是關於PHP。 腳本按原樣工作,一行一行,我們無能爲力。 如果你想快速完成任務(更接近異步),你應該重新構建你的應用程序架構。
https://en.wikipedia.org/wiki/Service-oriented_architecture
首先,你應該有一些「公交車」事件,一個腳本放在那裏的一些命令,其他腳本(惡魔)偵聽並執行該命令。
這裏的利潤是,將公共汽車的某些命令更快(我們甚至不需要等待響應)然後做實際的工作。實際工作($客戶端=新SoapClient的(...)這裏應該由其他腳本來完成。
對不起英語
這也取決於你是否需要網絡服務的輸出。
如果您需要它,請使用Ajax方式或服務方式。您也可以使用隊列來管理作業,如Redis或beanstalkd。
如果你不需要輸出,只是想調用API,那麼你也可以把這些代碼在另一個腳本,並調用它的背景下,像
shell_exec('php script.php someargs >/dev/null 2>&1 &');
通知的重定向,他們是需要的。
即使您實現了來自PHP的異步調用,您仍然需要等待X個時間,直到結果返回到PHP腳本。你的網站仍然會掛起,你什麼也沒有取得。在您的應用程序(客戶端)中實施加載指示器,並且不要對緩慢的服務執行太多的SOAP請求。 – Mjh