有什么办法可以在请求之间使用HTTP持久连接吗? 我没有看到CURL扩展有一种方法可以创建所有请求所使用的连接池,就像mysql,redis,pg的其他扩展一样。
从我看到你可以只在同一个请求中使用持久性http连接。
西尔维乌
答案 0 :(得分:2)
PHP的pecl_http扩展使用 libcurl ,并允许您打开可以重用的持久TCP连接:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^products\.cfm$ http://norrisealwellmark.com/products/ [L,NC,R=301]
如果在同一个PHP进程上运行的另一个$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请求期间)访问同一主机并共享相同的$persistentHandleID
,它将通过相同的TCP连接发送其HTTP请求。之前。
在PHP模块关闭或$client
发送$client
或forbids further use of the connection之前,TCP连接将保持活动状态:
Connection: Close
答案 1 :(得分:0)
在HTTP中,存在keep-alive和pipelining的概念。 Keep-Alive允许在多个HTTP请求和响应中使用一个TCP连接。这允许浏览器在一个TCP连接上加载具有其所有资源(例如图像,脚本等)的网页,这避免了连接建立和拆除开销。 CURL默认使用此功能,将Connection: keep-alive
附加到标头。服务器配置为最大请求以及连接保持打开的时间。但它仍然以请求 - 响应模式运行。
使用Pipelining可以在收到响应之前发出多个请求。流水线操作并未得到广泛实施,并且客户端和服务器都必须实现流水线操作。要在CURL中使用,您必须找到一个库(有一些库)为您的客户端实现它,服务器也必须再次使用它。
如果您不确定您的CURL应用程序是否正在发送保持活动标头,请使用http代理或数据包嗅探器来检查您的流量。