လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> curl_multi_close အတွက်တောင်းဆိုမှုများကိုအချိန်ကုန်ထိန်းချုပ်မှုကိုဘယ်လိုအကောင်အထည်ဖော်မလဲ

curl_multi_close အတွက်တောင်းဆိုမှုများကိုအချိန်ကုန်ထိန်းချုပ်မှုကိုဘယ်လိုအကောင်အထည်ဖော်မလဲ

gitbox 2025-05-12

PHP တွင် Curl_multi_ * လုပ်ဆောင်ချက်များသည်သင့်အား HTTP တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းပေးပို့သည်ကိုတစ်ပြိုင်နက်တည်းပေးနိုင်သည်။ သို့သော်လူအများစုက curl_multi_close ကိုသုံးသောအခါ,

အကယ်. အချိန်ကုန်သွားသောအချိန်သည်အချိန်ကြာမြင့်စွာတုံ့ပြန်မှုမရှိပါကတောင်းဆိုမှုသည်အချိန်ကြာမြင့်စွာတုံ့ပြန်မှုမရှိပါကလျှောက်လွှာတစ်ခုလုံးကိုမှီဝဲစေနိုင်သည်။ curl_multi_close ကို အသုံးပြုသောအခါအချိန်ကုန်ထိန်းချုပ်မှုကိုမည်သို့အကောင်အထည်ဖော်နိုင်မည်ကိုသင်ခန်းစာယူပါ။

အခြေခံအတွေးအခေါ်များ

စင်စစ်အားဖြင့် curl_multi_close ကို curl_mamulti လက်ကိုင်ကိုပိတ်ရန်သာအသုံးပြုသည်။ ၎င်းသည် အချိန်ကုန်ကိုမထိန်းချုပ်နိုင်ပါတောင်းဆိုမှုကိုကွပ်မျက်ခြင်း အဆင့်တွင်တကယ့်အချိန်ကုန်ဆုံးထိန်းချုပ်မှု (i.e. curl_multi_exec နှင့် curl_maxec နှင့် curl_multi_select )

ရိုးရိုးလေးပြောရရင်အချိန်ကုန်ထိန်းချုပ်မှုကမူတည်တယ်။

  • တစ်ခုတည်းဆံပင်ကောက်ကောက်ပေါ်တွင်အချိန်ကုန်ထားပါ

  • Execute loop တွင်စုစုပေါင်းအချိန်ကိုမှတ်တမ်းတင်ပါ

နမူနာကုဒ်

ဒီမှာလက်တွေ့ကျဥပမာတစ်ခုပါ။ https://gitbox.net/api/api/api/Api/Eendpoint1 နှင့် https://gitbox.net/api/api/api/api/api/api/api/api/api/api/api/api/api/api/api/point2 ကိုတောင်းခံရန်တောင်းဆိုမှုများရှိသည်ဆိုပါစို့။

 <?php

// နှစ်ခုဖန်တီးပါ cURL လက်ကိုင်
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('https://gitbox.net/api/endpoint2');

// တစ်ခုချင်းစီကိုတောင်းဆိုမှုတစ်ခုချင်းစီကိုသီးခြားစီသတ်မှတ်ထားပါ(မလုပ်မနေရမဟုတ်သော)
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_TIMEOUT, 8); // လူတစ် ဦး လျှင်အများဆုံးတောင်းဆိုမှုများ8စက်ဏန့်
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_TIMEOUT, 8);

// a cURL 批处理လက်ကိုင်
$mh = curl_multi_init();

// 添加လက်ကိုင်到批处理လက်ကိုင်中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// အသုတ်အပြောင်းအလဲနဲ့လုပ်ဆောင်ပါ
$startTime = microtime(true);
$timeout = 10; // စုစုပေါင်းအချိန်ကုန်(စက်ဏန့်)

do {
    $status = curl_multi_exec($mh, $active);

    // တက်ကြွစွာဆက်သွယ်မှုရှိနေသေးလျှင်
    if ($active) {
        // ပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်း
        $n = curl_multi_select($mh, 1.0);

        // လှျင် select ပြန်လာ -1,အလုပ်များစောင့်ဆိုင်းရှောင်ကြဉ်ပါ
        if ($n === -1) {
            usleep(100000); // အိပ်နေခြင်း100毫စက်ဏန့်
        }
    }

    // အချိန်ကုန်ရှိမရှိစစ်ဆေးပါ
    if ((microtime(true) - $startTime) > $timeout) {
        echo "တောင်းဆိုရန်စုစုပေါင်းအချိန်ကျော်လွန်{$timeout}စက်ဏန့်,အတင်းအဓမ္မပြတ်တောက်ခြင်း。\n";
        break;
    }
} while ($active && $status == CURLM_OK);

// ရလဒ်ကိုဖတ်ပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// 关闭လက်ကိုင်
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
curl_close($ch1);
curl_close($ch2);

// ရလဒ်များကိုပုံနှိပ်
echo "Response 1: " . substr($response1, 0, 100) . "...\n";
echo "Response 2: " . substr($response2, 0, 100) . "...\n";
?>

အဓိကအချက်များအကျဉ်းချုပ်

  1. curlopt_tilout သည် တောင်းဆိုမှုတစ်ခုတည်း၏ အချိန်ကုန်ကိုထိန်းချုပ်သည်။

  2. Microtime (True) ကိုမှတ်တမ်းတင်ခြင်းအားဖြင့် စုစုပေါင်းကွပ်မျက်အချိန်ကို ကိုယ်တိုင်ထိန်းချုပ်ထားသည်။

  3. curl_multi_select ကို အသုံးပြုသောအခါ CPU အသုံးပြုမှုကိုရှောင်ရှားရန်သင့်လျော်သောအချိန်ကုန်လွှာတန်ဖိုး (1 စက္ကန့်) ကိုသတ်မှတ်ပါ။

  4. curl_multi_close သည်အရင်းအမြစ်များကိုသန့်ရှင်းရေးအတွက်သာတာဝန်ရှိကြောင်းနှင့် အချိန်ကုန်လွှာယုတ္တိဗေဒကိုမထိန်းချုပ်နိုင်ပါ

မှတ်သားရန်အရာ

  • အကယ်. သင်တိုတောင်းလွန်းသည့်အချိန်ကိုရွေးချယ်ပါ။

  • Rearl_Multi_select -11111 ကို ပြန်ပို့ပါ။

  • အချိန်ကုန်ဆုံးသောအခါအရင်းအမြစ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်မပြီးဆုံးသေးသောတောင်းဆိုချက်ကိုကြိုတင်ပြင်ဆင်ရန်အကောင်းဆုံးဖြစ်သည်။