php和持久的HTTP连接

时间:2017-01-12 21:24:50

标签: php http curl connection-pooling persistent-connection

有什么办法可以在请求之间使用HTTP持久连接吗? 我没有看到CURL扩展有一种方法可以创建所有请求所使用的连接池,就像mysql,redis,pg的其他扩展一样。

从我看到你可以只在同一个请求中使用持久性http连接。

西尔维乌

2 个答案:

答案 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发送$clientforbids 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代理或数据包嗅探器来检查您的流量。