PHP的curl multi可以使用多线程处理http请求,一定程度上可以提高请求接口的效率。但是,启用多线程也是会消耗资源的事情,那么每次curl multi同时并发多少个请求合适呢?
接下来做了以下一个实验,在开始的时候,先说说实验的结论:
实验结论
1)首先要检查发起请求服务器的网络带宽是否正常,避免请求服务器出现带宽瓶颈。
2)curl multi并发请求并发数有一个阈值,过高的并发不能提升效率,反而会导致请求不成功,这个阈值与服务端的性能有关。
3)CURLOPT_TIMEOUT必须跟进实际业务设置合适的值
实验代码:通过curl multi请求远程服务器上的一个接口,接口只是简单的返回字符串'1',验证请求成功的比例。
<?php
$max_request = $argv[1];
$ch_list = array();
$multi_ch = curl_multi_init();
for ($i = 1;$i <= $max_request;++$i) {
$ch_list[$i] = curl_init("http://www.xxx.com/a.php");
curl_setopt($ch_list[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_list[$i], CURLOPT_TIMEOUT, 10);
curl_multi_add_handle($multi_ch, $ch_list[$i]);
}
$active = null;
do {
$mrc = curl_multi_exe