我有一個調用外部休息服務的功能。多久取決於輸入數據,例如。用戶請求的內容是批量轉換特殊類型的數據和標識符。即使只有50次轉換,這個速度也很慢。PHP cURL:在執行大量REST調用時提高性能
使用php_curl調用REST Web服務。現在我認爲爲每次轉換創建一個新的連接正在造成這種情況。我試圖reusign相同的手柄和每個呼叫調整網址,我也試過這樣:
我在這兩種情況下0的性能提升。我在Windows上。也許這是問題?使用TCPView工具,我可以很容易地看到新的連接是「集體創建」的。也許我解釋錯了,但對我來說,它看起來每個轉換仍然創建1個連接。
所以我有點失落。任何人都知道連接是否實際上在Windows實現上重用?它可能是由遠程服務器引起的嗎?
編輯:
當前設置是簡單的:
if(empty($this->curlHandle)){
$this->curlHandle = curl_init();
curl_setopt($this->curlHandle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->curlHandle, CURLOPT_PROXY, $this->proxy);
curl_setopt($this->curlHandle, CURLOPT_PROXYPORT, $this->proxyPort);
curl_setopt($this->curlHandle, CURLOPT_HTTP_VERSION, 1.1);
}
//$ch = curl_init();
curl_setopt($this->curlHandle, CURLOPT_URL, $baseUrl . $identifier . '/' . $format);
$result = curl_exec($this->curlHandle);
這裏通過實例調用返回的報頭:
HTTP/1.1 200 OK
Date: Fri, 28 Sep 2012 05:23:37 GMT
Server: Apache/2.2.15 (Scientific Linux)
Last-Modified: Fri, 28 Sep 2012 05:16:37 GMT
ETag: "0924166dd08dd5845929794dbd07d288"
Expires: Mon, 08 Oct 2012 05:16:37 GMT
Cache-Control: max-age=864000
Access-Control-Allow-Origin: *
Connection: close
Content-Type: text/plain; charset=UTF-8
編輯2:
有一個不同遠程Web服務提供類似的功能(但數據較少,例如I的查找數據d)。在Firefox中運行時,服務會發送保持活動標題。所以我實現了它。但問題依然存在。同樣緩慢。然後我使用curl cmd-line來玩弄,並注意到當使用curl時,所述服務器返回一個連接:關閉。
不是持久連接是http 1.1的一部分而不是http 1.0的一部分嗎?您可能想要檢查1.1是否被實際使用,請求持久性,並且服務器實際上支持它。 – arkascha
是啊,我的壞。在用FF和Firebug調用服務的輝煌(明顯的)想法之後,我看到服務器返回了一個連接:close header。我試着發送一個Connection:keep-alive頭,但沒有效果。我怎樣才能看到使用哪個http版本? –
有兩個相關的cURL選項:CURLOPT_MAXCONNECTS和CURLOPT_HTTP_VERSION,查看文檔。持久連接是http 1.1中的默認連接,curl支持AFAIK。那是什麼樣的服務器? – arkascha