php代码如下
$chlist = [];
foreach($requestList as $k=>$v){
$chlist[$k]=curl_init();
curl_setopt($chlist[$k], CURLOPT_URL, $sysConfig['apiUrl']);
curl_setopt($chlist[$k], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chlist[$k], CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($chlist[$k], CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip'));
curl_setopt($chlist[$k], CURLOPT_ENCODING, "gzip");
curl_setopt($chlist[$k], CURLOPT_HTTPHEADER, array (
"Content-Type: application/x-www-form-urlencoded; charset=gbk",
));
$strPost = encode($v['params']);
curl_setopt ( $chlist[$k], CURLOPT_POSTFIELDS, $strPost );
curl_setopt($chlist[$k], CURLOPT_TIMEOUT,120);
}
$mh = curl_multi_init();
foreach($chlist as $k=>$v) {
curl_multi_add_handle($mh,$v);
}
$active = null;
// 执行批处理句柄
$start=time();
var_dump($start);
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
$end = time();
var_dump($end);
//4.关闭子curl
foreach($chlist as $val){
curl_multi_remove_handle($mh, $val);
$response[] = curl_multi_getcontent($val);
}
//5.关闭父curl
curl_multi_close($mh);
var_dump($end - $start);exit;
//var_dump($response);
return $response;
代码放在服务器上,使用命令行执行,这里的$requestList数组可以根据命令行的参数生成对应数量的数组
我测试php index.php 500或者php index.php 1000都是正常的,但当我提高到php index.php 2000时,命令行提示段错误,这是什么原因导致的?与服务器性能是否相关?
百度找到了这篇文章,但尝试添加
curl_setopt ( $ch, CURLOPT_NOSIGNAL,true);
并没有效果