2012-08-15 22 views
5

我正在開展能源項目。在我的網站中,可能有能源服務通過網絡服務在那裏註冊。最初是1開始,現在3更多來整合。PHP如何同時實現多個Web服務?

在第一頁上,我已經展示了基於郵政編碼的計劃。現在在這個頁面上,我已經要求所有4個能源供應商列出能源計劃。

要連續請求每個服務,肯定需要更多的時間,因爲我必須從外部來源獲取數據,而且這是第一頁,所以我不想讓它在第一個時間慢下來僅限實例。

我該如何向所有服務同時提出請求,並從每個服務收集數據並將其列在最終頁面上。

+0

我知道很多人會抱怨,但你有沒有想過多線程?從最初的幾個谷歌搜索結果看,這些看起來像是開始的好地方... http://villavu.com/forum/showthread.php?t=73623和http://blog.motane.lu/2009/01/02/multithreading-in-php/support看起來很渺茫,但是這可能會讓所有4個請求都以「一次」的速度加速 - 這就是我想象的至少... – blad 2012-08-15 07:05:53

+1

緩存怎麼樣?這些計劃多久改變一次?它是否必須是實時的?爲什麼不用cron作業每隔1-5分鐘輪詢所有服務並將結果存儲在memcache或MySQL HEAP表中?然後你的前端可以從緩存中讀取,而不是從web服務中讀取。 – Costa 2012-08-16 21:05:01

+0

@Costa聽起來很好的解決方案。但問題是,我不知道有多少郵編以及他們多久更換一次計劃。可能有大約5萬個郵編。但我會牢記這一點,並在可行的地方實施。 – Vins 2012-08-17 03:59:32

回答

3

在Web服務器上執行時,實際上只有一種非惡意方式可以使用PHP來執行此操作。您需要將cURL模塊編譯到PHP中。它具有對執行並行請求的內置支持。有關使用示例,請參閱www.php.net的註釋和文檔。

嘗試:http://www.php.net/manual/en/function.curl-multi-init.php

其他選項,如分叉後臺進程或調用一個UNIX shell,是可怕的維持,很少跨平臺的。在幾乎任何常見的PHP環境中,多線程並不是一個有效的選項。

我應該提到,雖然不一定表明可以使用AJAX方法。在所有情況下它都不是輕量級的,但它應該被稱重。

+0

當我處理類似的情況時,我通過卸載工作來獲取數據到一個蛋糕殼中解決了這個問題,它使用pcntl_fork來運行同時的web服務請求。子進程將響應存儲在共享內存中,當所有進程完成後,父shell進程收集它們並將其發送回webrequest。它爲我減少大量的加載時間。但要考慮到Pestilence對這個解決方案的看法。 – Ceeram 2012-08-15 08:03:42

+0

@pestilence如果我使用不同的請求調用webservices會怎樣。一個使用REST secong使用SOAP第三個使用Curl ..那時候它將如何幫助完成..謝謝 – 2012-10-15 10:39:46

相關問題