gpt4 book ai didi

php - 什么时候检查异步 cURL 请求是否完成最好?

转载 作者:搜寻专家 更新时间:2023-10-31 21:10:32 24 4
gpt4 key购买 nike

多个 cURL 请求最好以异步方式进行,即每个请求都不会等待所有先前的请求都收到响应。在许多情况下,另一个优化是开始处理收到的响应而不等待其他响应。但是,文档和官方示例并不清楚何时可以尽早检查已完成的请求(通常使用 curl_multi_info_read 函数完成)。

那么最早检查已完成请求的时间点是什么时候?或者这些点的最佳集合是什么?

这是来自 curl_multi_exec 的示例的页面(大写的评论是我的):

<?php

// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//create the multiple cURL handle
$mh = curl_multi_init();

//add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active = null;
//execute the handles
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
// SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE?
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
// SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE?
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
// SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE?
}
// SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE?
}
// SHOULD REQUESTS BE CHECKED FOR COMPLETION HERE?

//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

?>

最佳答案

首先,简化您的生活CURLM_CALL_MULTI_PERFORM return code isn't used在现代 libcurls 中(不在 7.20.0 或更高版本中使用)。

然后,只要 'active' 大于零,就有至少一个事件传输正在进行,因此您可以等待检查 curl_multi_info_read()如果你愿意的话。

或者您可以调用curl_multi_info_read()每次调用curl_multi_exec()后立即,由你决定!

关于php - 什么时候检查异步 cURL 请求是否完成最好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com