Skip to content

Instantly share code, notes, and snippets.

@guanguans
Last active November 3, 2022 07:32
Show Gist options
  • Save guanguans/166a02baf0dd0ef8f4e68ce11b1efb42 to your computer and use it in GitHub Desktop.
Save guanguans/166a02baf0dd0ef8f4e68ce11b1efb42 to your computer and use it in GitHub Desktop.
#curl
<?php
/**
* curl 并发请求示例
*/
$startTime = microtime(true);
$curls = [];
for ($i = 1; $i <= 10; $i++) {
// 创建 curl 句柄
$curls[$i] = $curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://strangecat-api.test/api/v1/ping",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
]);
}
$mcurl = curl_multi_init(); // 1.创建 curl 批处理句柄
foreach ($curls as $ch) {
curl_multi_add_handle($mcurl, $ch); // 2.添加 curl 句柄
}
$active = null;
do {
// echo "running", $active, PHP_EOL;
curl_multi_exec($mcurl, $active); // 3.执行 curl 批处理句柄
} while ($active > 0); // 4.
foreach ($curls as $k => $ch) {
$rets[$k] = curl_multi_getcontent($ch); // 5.获取 curl 批处理句柄的返回值
curl_multi_remove_handle($mcurl, $ch); // 6.移除 curl 句柄
}
curl_multi_close($mcurl); // 7 关闭 curl 批处理句
$endTime = microtime(true);
var_export($rets);
printf(
PHP_EOL . "Time: %.3f s | Memory Peak Usage: %s bytes | Memory Usage: %s bytes" . PHP_EOL,
$endTime - $startTime,
memory_get_peak_usage(),
memory_get_usage()
);
<?php
/**
* curl 普通请求示例
*/
$startTime = microtime(true);
$rets = [];
for ($i = 1; $i <= 10; $i++) {
// 创建 curl 句柄
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://strangecat-api.test/api/v1/ping",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
]);
$response = curl_exec($curl);
$err = curl_error($curl);
// 关闭 curl 句柄
curl_close($curl);
$rets[$i] = $err ? : $response;
echo "running", $i, PHP_EOL;
}
$endTime = microtime(true);
var_export($rets);
printf(
PHP_EOL . "Time: %.3f s | Memory Peak Usage: %s bytes | Memory Usage: %s bytes" . PHP_EOL,
$endTime - $startTime,
memory_get_peak_usage(),
memory_get_usage()
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment