[英]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.