2017-01-12 5 views
0

Есть ли способ использовать постоянные соединения HTTP между запросами? Я не вижу расширения CURL, способ создания пула соединений, которые используются всеми запросами, как есть в других расширениях для mysql, redis, pg.php и постоянные HTTP-соединения

Из того, что я вижу, вы можете использовать постоянные http-соединения только внутри одного и того же запроса.

Silviu

ответ

1

pecl_http расширение для PHP использует 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); 

Если другой $client работает на том же PHP процесс (возможно, при другом запросе PHP) обращается к одному и тому же хосту и имеет то же самое $persistentHandleID, он будет отправлять свои HTTP-запросы по тому же TCP-соединению, что и раньше.

соединение TCP будет храниться в живых, пока модуль PHP не будет выключен или пока $client не посылает Connection: Close или forbids further use of the connection:

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

Спасибо, Джо, вот что я ищу! – silviu

0

В HTTP есть понятие Keep-Alive и конвейеризации. Keep-Alive позволяет использовать одно TCP-соединение для нескольких HTTP-запросов и ответов. Это позволяет браузеру загружать веб-страницу со всеми ее ресурсами (например, изображениями, сценариями и т. Д.) На одном TCP-соединении, что позволяет избежать установки соединения и сбрасывать служебные данные. CURL использует это по умолчанию, добавляя Connection: keep-alive в заголовок. Сервер настроен на максимальные запросы и как долго будет оставаться открытым. Но он все еще действует в режиме запроса-ответа.

С подачей нескольких запросов может быть получено до получения ответа. Конвейерная обработка не широко внедрена, и для работы как клиент, так и сервер должны ее реализовать. Чтобы использовать в CURL, вы должны найти библиотеку (есть некоторые там), которая реализует ее для вас, и снова сервер также должен ее использовать.

Если вы не уверены в том, что ваше приложение CURL отправляет заголовок keep-alive, используйте http proxy или sniffer для проверки вашего трафика.

+0

С HTTP/1.1 постоянные соединения по умолчанию и не 'соединения:' заголовок необходимо для этого. Все, что требуется PHP-программе, это повторное использование одного и того же ручка зависания при выполнении последующих запросов. –

+0

мой вопрос: каким-либо образом вы можете использовать постоянные соединения HTTP между запросами, а также в последнем сообщении, которое я worte: из того, что я вижу, вы можете использовать постоянные http-соединения только внутри одного и того же запроса. Из-за жизненного цикла скриптов php я не вижу, как вы можете использовать пул соединений. – silviu