Fra*_*mer 59 php curl http libcurl keep-alive
我正在使用一个简单的PHP库通过HTTP将文档添加到SOLR索引.
目前涉及3台服务器:
在80个文档/秒(100万个文档中),我注意到PHP和solr盒子上的网络接口上的异常高的中断率(2000 /秒;更重要的是,图表几乎相同 - 当中断时PHP盒子峰值的速率,它也在Solr盒子上激增),但在数据库盒子上却少得多(300 /秒).我想这只是因为我打开并重用了一个到数据库服务器的连接,但是每个Solr请求当前都是通过cURL打开一个新的HTTP连接,这要归功于Solr客户端库的编写方式.
所以,我的问题是:
Pis*_*3.0 54
cURL PHP文档(curl_setopt)说:
CURLOPT_FORBID_REUSE-TRUE强制连接在处理完成后显式关闭,而不是合并重用.
所以:
小智 21
Curl默认发送keep-alive头,但是:
curl_init()不带任何参数创建上下文.CURLOPT_URL选项将url传递给上下文curl_exec()curl_close()非常基本的例子:
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);
Run Code Online (Sandbox Code Playgroud)
Ole*_*hay 14
在您正在访问的服务器上,必须启用keep-alive,并且最大保持活动请求应该是合理的.对于Apache,请参阅apache文档.
您必须重新使用相同的cURL上下文.
配置cURL上下文时,在标头中启用keep-alive with timeout:
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array(
'Connection: Keep-Alive',
'Keep-Alive: 300'
));
Run Code Online (Sandbox Code Playgroud)