一尘不染

持久性/ keepalive HTTP与PHP Curl库?

php

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

目前涉及3台服务器:

  1. 运行索引工作的PHP框
  2. 一个数据库框,其中包含要建立索引的数据
  3. solr框。

以每秒80个文档(每秒100万文档)的速度,我注意到PHP和solr盒上的网络接口的中断率异常高(2000 / sec;此外,图形几乎相同-
当中断时率在PHP框上达到峰值,在Solr框上也达到峰值),但在数据库框上却达到峰值(300
/秒)。我想这仅仅是因为我打开并重用了与数据库服务器的单个连接,但是由于Solr客户端库的编写方式,每个Solr请求当前都通过cURL打开了一个新的HTTP连接。

所以,我的问题是:

  1. 可以使用cURL打开一个keepalive会话吗?
  2. 重用连接需要什么?-是否像重用cURL句柄资源一样简单?
  3. 我是否需要设置任何特殊的cURL选项?(例如,强制使用HTTP 1.1?)
  4. 是否存在使用cURL keepalive连接的陷阱?该脚本一次运行数小时;我将能够使用单个连接,还是需要定期重新连接?

阅读 393

收藏
2020-05-26

共1个答案

一尘不染

cURL PHP文档(curl_setopt)说:

CURLOPT_FORBID_REUSE - TRUE强制连接在完成处理后显式关闭,而不被合并以重用。

所以:

  1. 是的,实际上,默认情况下,只要您重新使用cURL句柄,它就应该重新使用连接。
  2. 默认情况下,cURL自己处理持久连接;如果您需要一些特殊的标题,请检查CURLOPT_HTTPHEADER
  3. 服务器可能会发送保持活动超时(默认情况下,Apache安装为15秒或100个请求,以先到者为准)-但是,当发生这种情况时,cURL只会打开另一个连接。
2020-05-26