首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHP Curl库的持久/保持连接HTTP?

使用PHP Curl库的持久/保持连接HTTP?
EN

Stack Overflow用户
提问于 2009-06-09 22:59:49
回答 4查看 77.8K关注 0票数 64

我使用一个简单的PHP库通过HTTP将文档添加到SOLR索引中。

目前涉及3台服务器:

  1. 运行索引作业的PHP框
  2. 保存被索引的数据的数据库框
  3. solr框。

在每秒80个文档(总共100万个文档)的情况下,我注意到PHP和solr机器上的网络接口有异常高的中断率(2000/秒;而且,图形几乎相同--当PHP机器上的中断率达到峰值时,Solr机器上的中断率也会达到峰值),但数据库机器上的中断率要低得多(300/秒)。我想这很简单,因为我打开并重用了到数据库服务器的单个连接,但由于Solr客户端库的编写方式,每个Solr请求当前都通过cURL打开一个新的HTTP连接。

所以,我的问题是:

  1. 可以让cURL打开保持连接会话吗?
  2. 重用连接需要做什么?--是否像重用cURL句柄资源一样简单?
  3. 我需要设置任何特殊的cURL选项吗?(例如强制HTTP1.1?)
  4. cURL保持连接有什么问题吗?此脚本一次运行数小时;我将能够使用单个连接,还是需要定期重新连接?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-11 17:40:38

PHP文档(curl_setopt)说:

CURLOPT_FORBID_REUSE - TRUE强制连接在完成处理后显式关闭,并且不会被池化以供重用。

所以:

  1. 是,实际上它应该在默认情况下重新使用连接,只要您重新使用cURL句柄。
  2. 默认情况下,cURL自己处理持久连接;如果您需要一些特殊的头,请检查cURL服务器可能会发送保持连接超时(对于默认的

安装,它是15秒或100个请求,以先出现的为准)-但当发生这种情况时,cURL将只打开另一个连接。

票数 58
EN

Stack Overflow用户

发布于 2012-04-10 21:32:58

Curl默认发送keep-alive报头,但是:

context

  • execute

  • 使用curl_init()创建上下文,而不使用任何var将上下文保留在一个范围内(而不是本地var)

  • 使用CURLOPT_URL选项将url传递给var请求使用var关闭与var的连接

非常基本的例子:

function get($url) {
    global $context;
    curl_setopt($context, CURLOPT_URL, $url);
    return curl_exec($context);
}

$context = curl_init();
//multiple calls to get() here
curl_close($context);
票数 23
EN

Stack Overflow用户

发布于 2009-11-17 09:25:45

您要访问的服务器上的

  1. 必须启用keep-alive,并且最大keep-alive请求数应该是合理的。如果是Apache,请参考apache docs.
  2. You必须使用相同的cURL context。
  3. 配置cURL context时,在header中启用keep-alive with timeout:

curl_setopt($curlHandle,CURLOPT_HTTPHEADER,curl_setopt( 'Connection: Keep-Alive','Keep-Alive: 300‘));

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/972925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档