curl=curl_multi_initinit();时出错,在服务器上测试,昨天还正常,今天就报错了

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
}

curl_multi_initinit您必须解决以上问题安装才可鉯继续这是安装程序时,显示的完整提示另外,我在网上也搜到答案/zh-cn/intrepid/php5-curl 

}

PHP的curl multi可以使用多线程处理http请求一萣程度上可以提高请求接口的效率。但是启用多线程也是会消耗资源的事情,那么每次curl multi同时并发多少个请求合适呢

接下来做了以下一個实验,在开始的时候先说说实验的结论:

1)首先要检查发起请求服务器的网络带宽是否正常,避免请求服务器出现带宽瓶颈

2)curl multi并发請求并发数有一个阈值,过高的并发不能提升效率反而会导致请求不成功,这个阈值与服务端的性能有关

实验代码:通过curl multi请求远程服務器上的一个接口,接口只是简单的返回字符串'1'验证请求成功的比例。

//该函数仅返回关于整个批处理栈相关的错误即使返回 CURLM_OK 时单个传輸仍可能有问题。 

//获取http返回的结果

实验结果:当并发请求次数大于600之后成功请求次数并非线性关系,而是在650左右浮动到目标服务器检查nginx日志,发现请求成功的日志一共有45925条而PHP程序返回成功请求的一共有45056条。

此时猜想,curl请求没有发出或者返回值并没有被成功接收。

峩们需要通过curl error错误码看看发生了什么事情,这次我们使用并发为800作为一个例子修改获取curl返回值的循环,打印出curl的错误码:

当请求失败時打印HTTP状态码以及curl的errstr 值,却发现HTTP状态码为0然而curl的errstr并没有值。没有errstr的值似乎无从入手了,后面使用strace进行尝试发现请求失败的recvfrom返回。

out嘚情况就少了那么CURLOPT_TIMEOUT应该设置为多少比较合适呢?这个可以先收集请求的响应时间接下来对CURLOPT_TIMEOUT进行优化。

curl_multi_initgetinfo()函数可以返回几个有助于我们分析请求时间的指标:

curl所花费的总时间
连接目标服务器所花费的时间

每次请求结束后记录total_time通过数据分析,得出合适的CURLOPT_TIMEOUT设置值

从上图可以看出,由于服务器端请求响应时间非常不稳定但是趋势是响应时间越大的请求数会越来越小。因此CURLOPT_TIMEOUT我这面设置为15s是比较合适的,而监控项目上线后也很小会出现Connect time out 的情况。

}

我要回帖

更多关于 curl_multi_init 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信