如題,使用curl_multi 可以實(shí)現(xiàn),不過有人為指定耗時(shí)。
業(yè)務(wù)需要同時(shí)請求多個(gè)第三方,看誰先返回。然后判斷結(jié)果,如果不正確,再等待第二快返回的,直到結(jié)果正確。
然后,處理接下來的業(yè)務(wù)。
推薦 curl_multi
大佬,除了 curl_multi,還有其他方法可以顯示這種業(yè)務(wù)需求嗎; 同行都是 golang 的 協(xié)程實(shí)現(xiàn)的。php目前好像還不行。如何實(shí)現(xiàn)?在線等。
另外,還有一個(gè)問題,curl_multi,會人為顯示的設(shè)置usleep。 而業(yè)務(wù)需要及時(shí)返回的。否則就會超時(shí),下游有200毫秒的超時(shí),限制?,F(xiàn)在有大量的超時(shí)數(shù)據(jù)。
1 最好的結(jié)果就是,用php 本身的語言特性實(shí)現(xiàn);
2 用webman的自身機(jī)制,實(shí)現(xiàn)這個(gè)需求。應(yīng)該如何實(shí)現(xiàn)?不確定webman 框架能否實(shí)現(xiàn)? workerman 能否實(shí)現(xiàn)。好像 swool 可以實(shí)現(xiàn),
3 如果swool 可以實(shí)現(xiàn),那就在webman中引入swool來達(dá)到目的,應(yīng)該如果做?
4 比較緊急。
<?php
$urls = array(
"http://lxr.php.net/",
"http://www.php.net/",
);
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh, $conn[$i]);
}
do {
$status = curl_multi_exec($mh, $active);
$info = curl_multi_info_read($mh);
if (false !== $info) {
$result = curl_multi_getcontent($info['handle']);
// 這里獲得每個(gè)cul的結(jié)果,如果結(jié)果是想要的就返回,不是就等下一個(gè)結(jié)果
echo $result;
//return $result;
}
} while ($status === CURLM_CALL_MULTI_PERFORM || $active);
foreach ($urls as $i => $url) {
curl_close($conn[$i]);
}
這個(gè)是并發(fā)執(zhí)行的,哪個(gè)結(jié)果先返回就用哪個(gè)