php和持久HTTP连接

php和持久HTTP连接,php,http,curl,connection-pooling,persistent-connection,Php,Http,Curl,Connection Pooling,Persistent Connection,有什么方法可以在请求之间使用HTTP持久连接? 我不认为CURL扩展能够像mysql、redis和pg的其他扩展那样创建所有请求都使用的连接池 据我所见,您只能在同一请求中使用持久http连接 Silviu在HTTP中,有保持活动和管道的概念。Keep Alive允许跨多个HTTP请求和响应使用一个TCP连接。这允许浏览器在一个TCP连接上加载包含其所有资源(例如图像、脚本等)的网页,从而避免了连接设置和降低开销CURL默认情况下使用此选项,将连接:保持活动状态附加到标头。服务器配置为最大请求数

有什么方法可以在请求之间使用HTTP持久连接? 我不认为CURL扩展能够像mysql、redis和pg的其他扩展那样创建所有请求都使用的连接池

据我所见,您只能在同一请求中使用持久http连接


Silviu

在HTTP中,有保持活动和管道的概念。Keep Alive允许跨多个HTTP请求和响应使用一个TCP连接。这允许浏览器在一个TCP连接上加载包含其所有资源(例如图像、脚本等)的网页,从而避免了连接设置和降低开销CURL默认情况下使用此选项,将
连接:保持活动状态
附加到标头。服务器配置为最大请求数以及连接保持打开的时间。但它仍然以请求-响应模式运行

通过管道传输,可以在收到响应之前发出多个请求。流水线并没有得到广泛的实现,为了工作,客户端和服务器都必须实现它。要在CURL中使用,您必须找到一个为您的客户机实现它的库(有一些库),服务器也必须使用它

如果您不确定您的CURL应用程序是否正在发送keep-alive报头,请使用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);
如果在同一个PHP进程上运行的另一个
$client
(可能在不同的PHP请求期间)访问同一个主机并共享同一个主机,它将通过与以前相同的TCP连接发送其HTTP请求

TCP连接将保持活动状态,直到PHP模块关闭或
$client
发送
连接:关闭或:


对于HTTP/1.1,默认情况下使用持久连接,不需要
连接:
头。PHP程序需要做的就是在执行后续请求时重用相同的curl句柄。我的问题是:有任何方法可以在请求之间以及在最后一篇文章中使用HTTP持久连接:据我所知,您只能在同一请求内使用持久HTTP连接。由于php脚本的生命周期,我不知道如何使用连接池。谢谢Joe,这就是我要搜索的!您可能想看看这篇优秀的文章:
$client->setOptions(['forbid_reuse' => true, … ]);