用php 循环写一个并发请求

发布时间 2023-09-01 17:07:45作者: 哼哼哈兮啊
点击查看代码
<?php
// 要测试的接口 URL
$apiUrl = 'https://example.com/api';

// 并发请求数
$concurrentRequests = 10;

// 创建 cURL 多个句柄
$curlHandles = [];
for ($i = 0; $i < $concurrentRequests; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 在这里可以设置其他 cURL 选项,如请求方法、请求头等
    $curlHandles[] = $ch;
}

// 创建 cURL 多个句柄的批处理
$multiHandle = curl_multi_init();
foreach ($curlHandles as $ch) {
    curl_multi_add_handle($multiHandle, $ch);
}

// 执行并发请求
$active = null;
do {
    $mrc = curl_multi_exec($multiHandle, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($multiHandle) != -1) {
        do {
            $mrc = curl_multi_exec($multiHandle, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

// 获取响应并处理
$responses = [];
foreach ($curlHandles as $ch) {
    $responses[] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($multiHandle, $ch);
}
curl_multi_close($multiHandle);

// 处理响应数据,可以输出或记录
foreach ($responses as $response) {
    // 处理响应数据的逻辑
    // 例如,您可以在这里检查响应是否满足预期的条件,记录响应时间等
    echo $response;
}

// 注意:这只是一个简单的示例,您可能需要根据实际需要进行调整和优化。
?>