queue 中使用curl_multi 创建多个句柄无法运行成功
1. 运行环境
1). 当前使用的 Laravel 版本?
5.X
2). 当前使用的 php/php-fpm 版本?
PHP 版本:7.0
php-fpm 版本:7.0
3). 当前系统
CentOS 6
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )
4). 业务环境
开发环境
//: <> (期待信息 开发环境
或 生产环境
)
//: <> (是否使用负载均衡?请提供相关信息)
5). 相关软件版本
2. 问题描述?
我在其他地方调用 该方法可以成功
但是在队列中调用失败,没有报错信息 并且cpu一直升高
$optArr = [
CURLOPT_HTTP_VERSION => 3,
CURLOPT_POSTFIELDS => '',
CURLOPT_HEADER => TRUE,
CURLOPT_RETURNTRANSFER => 1,
];
$result = [];
//创建多个curl资源
for ($i=0; $i<2; $i++) {
$chArr[$i] = curl_init();
$optArr[CURLOPT_URL] = $service_url;
curl_setopt_array($chArr[$i], $optArr);
}
//创建批处理curl句柄
$mh = curl_multi_init();
//将单个curl句柄添加到批处理curl句柄中
foreach ($chArr as $ch) {
curl_multi_add_handle($mh, $ch);
}
//判断操作是否仍在执行的标识的引用
$active = null;
do {
//处理在批处理栈中的每一个句柄
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
//程序退出阻塞状态继续执行需要处理的 $ch 句柄
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
foreach ($chArr as $i=>$ch) {
//获取某个curl句柄的返回值
$result[$i] = curl_multi_getcontent($ch);
//移除批处理句柄中的某个句柄资源
curl_multi_remove_handle($mh, $ch);
}
//关闭一组curl句柄
curl_multi_close($mh);
推荐文章: