簡體   English   中英

php和持久HTTP連接

[英]php and persistent HTTP connections

有什么方法可以在請求之間使用HTTP持久連接? 我沒有看到CURL擴展具有創建所有請求都使用的連接池的方法,就像mysql,redis和pg的其他擴展一樣。

從我所看到的,您只能在同一請求內使用持久性HTTP連接。

西爾維

PHP的pecl_http擴展使用libcurl,並允許您打開一個可重用的持久TCP連接:

$client = new http\Client('curl', $persistentHandleID); 
$request = new http\Client\Request('GET', 'http://example.com/');
$client->enqueue($request);
$client->send();
$response = $client->getResponse($request);

如果另一個在相同PHP進程上運行的$client (可能在不同的PHP請求期間)訪問同一主機並共享相同的$persistentHandleID ,它將通過與以前相同的TCP連接發送其HTTP請求。

TCP連接將一直保持活動狀態,直到PHP模塊關閉或$client發送Connection: Close禁止進一步使用該連接為止:

$client->setOptions(['forbid_reuse' => true, … ]);

在HTTP中,有保持活動和流水線的概念。 保持活動狀態允許跨多個HTTP請求和響應使用一個TCP連接。 這樣一來,瀏覽器就可以通過一個TCP連接將網頁的所有資源(例如圖像,腳本等)加載到網頁上,從而避免了連接設置和操作開銷。 默認情況下CURL使用此方法 ,將Connection: keep-alive附加到標頭。 為服務器配置了最大請求數以及連接將保持打開狀態的時間。 但是它仍然以請求-響應模式運行。

通過管道傳輸,可以在收到響應之前發出多個請求。 流水線沒有廣泛實現,並且要使客戶端和服務器都能工作,流水線必須實現。 要在CURL中使用,您必須找到一個庫(那里有一些庫)可以為您的客戶端實現該庫,服務器也必須再次使用它。

如果不確定CURL應用程序是否正在發送keep-alive標頭,請使用http代理或數據包嗅探器檢查您的流量。

暫無
暫無

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

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