1
我有一個與RESTful服務器接口的PHP客戶端應用程序。客戶端上的每個PHP Goat實例都需要基於服務器上的/ goat請求中的信息(例如/ goat/35,/ goat/36等)進行初始化。它通過cURL向相應的URL發送HTTP請求來完成此操作。每頁加載30個山羊對象相當於30多個HTTP請求,每個請求需要0.25秒 - 這正如我的山羊會說的那樣。在內存中延遲加載和緩存響應有幫助,但還不夠。面向對象的PHP中的非阻塞HTTP請求?
foreach ($goats as $goat) {
$goat->getName() // goat needs to hit the REST API
}
這種技術的優點是,我的山羊都是聰明和封裝。缺點是表現糟糕。山羊不知道如何排隊他們的HTTP請求,一隻山羊不知道是否有其他山羊需要發起請求,等等。我想一種替代方案是在外部建立山羊:
$urls = array('http://', 'http://', ...); // array of goat URLs
$result = fancy_pipelined_http_request_queue($urls);
foreach ($result as $xml) {
$goat->buildSelfFromXML($xml);
}
我敢肯定,這是一個衆所周知的面向對象/休息的困境,有更先進的解決方法,我只是不知道在哪裏看。有任何想法嗎?
我仍然對建議感興趣,但在此期間,請檢查一下。每隻山羊都使用自己的捲曲手柄作爲私人變量。作爲一個測試,我使它變爲靜態的(所以一個句柄可以在所有的山羊之間共享),現在需要8秒加載的頁面現在需要0.9。我認爲這一切都是由於HTTP請求延遲... – alexantd 2009-09-23 03:01:03
@alexantd,一如既往,配置文件第一,責備第二:) – vava 2009-09-23 03:17:16
相似/ Dublicate:http://stackoverflow.com/questions/1432477/can-php-asynchronously-使用的套接字 – 2009-09-23 06:57:36