လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> curl_multi_close မတိုင်မီတောင်းဆိုမှုကိုမည်သို့ဆုံးဖြတ်ရမည်ကိုမည်သို့ဆုံးဖြတ်ရမည်နည်း

curl_multi_close မတိုင်မီတောင်းဆိုမှုကိုမည်သို့ဆုံးဖြတ်ရမည်ကိုမည်သို့ဆုံးဖြတ်ရမည်နည်း

gitbox 2025-05-12

curl_multi_ * လုပ်ဆောင်ချက်များကိုတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများပြုလုပ်ရန်လုပ်ဆောင်သည့်အခါများသောအားဖြင့်ကျွန်ုပ်တို့သည်များသောအားဖြင့် ဆံပင် ကောက်ကောက်အမျိုးမျိုးကိုဖွင့်ပြီးစည်းမျဉ်းစည်းကမ်းများအတွက် curl_multi လက်ကိုင်ကိုထည့်သွင်းထားသည်။
curl_multi_multi_close ကိုမခေါ်မီတောင်းဆိုမှုများအားလုံးကိုမှန်ကန်စွာပြီးစီးနိုင်စေရန်အတွက်အရင်းအမြစ်များကိုဖြန့်ချိရန်တောင်းဆိုခြင်းအတွက်တောင်းဆိုမှုတစ်ခုစီ၏ကွပ်မျက်မှုအခြေအနေကိုမှန်ကန်စွာစစ်ဆေးရန်လိုအပ်သည်။ ဤဆောင်းပါးသည်ဤလိုအပ်ချက်ကိုရရှိရန်စံနှင့်ယုံကြည်စိတ်ချရသောနည်းကိုရှင်းပြပါမည်။

အခြေခံဖြစ်စဉ်ကိုခြုံငုံသုံးသပ်ချက်

များသောအားဖြင့်ကျွန်ုပ်တို့သည်တောင်းဆိုမှုများကိုကိုင်တွယ်ရန်အောက်ပါအဆင့်များကိုလိုက်နာသည်။

  1. မျိုးစုံ ဆံပင်ကောက်ကောက် သီးခြားလက်ကိုင်အစပျိုး။

  2. ဤလက်ကိုင်များကို curl_multi လက်ကိုင်သို့ထည့်ပါ။

  3. curl_multi_exec ကိုအသုံးပြုပြီးတောင်းဆိုမှုများကိုစဉ်ဆက်မပြတ်တောင်းဆိုမှုများကိုဆက်လုပ်ပါ။

  4. Curl_multi_exec နှင့်ဆက်သွယ်ရန် curl_multi_exec နှင့်ဆက်သွယ်ပါ။

  5. ဖယ်ရှားပြီးပြီးစီးခဲ့တောင်းဆိုမှုကိုတ ဦး တည်းအားဖြင့်တ ဦး တည်းကိုင်တွယ်။

  6. တောင်းဆိုမှုများအားလုံးပြီးဆုံးကြောင်းသေချာပါစေ, ထို့နောက် curl_multi_close ဟုခေါ်သည်။

ဤတွင်ကျွန်ုပ်တို့သည် URLs မျိုးစုံကိုတောင်းဆိုရန်လိုအပ်သည်ဟုယူဆသောပြည့်စုံသောဥပမာတစ်ခုမှာ (ဤနေရာတွင် https://gitbox.net/exament1 နှင့် https://gitbox.net/example2 ကို ဥပမာအဖြစ်ယူဆသည်။

 <?php

// ဖြစ်ပေါ်လာခြင်း cURL multi လက်ကိုင်
$multiHandle = curl_multi_init();

// တစ်ခုချင်းစီကိုသိမ်းထားပါ cURL လက်ကိုင်的数组
$curlHandles = [];

// တောင်းဆိုရန် URL စာရင်း
$urls = [
    'https://gitbox.net/example1',
    'https://gitbox.net/example2',
];

// တစ်ခုချင်းစီကိုဖန်တီးနှင့်ထည့်ပါ cURL လက်ကိုင်
foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$i] = $ch;
}

// ကရိယာတန်းဆာ multi မေးမြန်း
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);

    // တားဆီး CPU ပျင်းရိသော
    if ($status == CURLM_OK) {
        curl_multi_select($multiHandle);
    } else {
        break;
    }

    // 检查是否有已完成的မေးမြန်း
    while ($info = curl_multi_info_read($multiHandle)) {
        if ($info['msg'] == CURLMSG_DONE) {
            // 获取完成的လက်ကိုင်
            $completedHandle = $info['handle'];

            // ပြန်လာသောအကြောင်းအရာကိုရယူပါ
            $response = curl_multi_getcontent($completedHandle);

            // ပြန်လာသောအချက်အလက်များကိုဤနေရာတွင်ပြုလုပ်နိုင်သည်
            echo "မေးမြန်း完成,ဒေတာအရှည်ပြန်လာ:" . strlen($response) . PHP_EOL;

            // 移除并关闭已完成的လက်ကိုင်
            curl_multi_remove_handle($multiHandle, $completedHandle);
            curl_close($completedHandle);
        }
    }
} while ($running > 0);

// နောက်ဆုံးအနီးကပ် multi လက်ကိုင်
curl_multi_close($multiHandle);

အဓိကအချက်များရှင်းပြချက်

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

  • CURL_Multi_Select - CPU အရင်းအမြစ်များစွန့်ပစ်ပစ္စည်းများကိုလျှော့ချရန်တက်ကြွစွာဆက်သွယ်မှုများကိုပိတ်ဆို့ရန်နှင့်စောင့်ဆိုင်းလေ့ရှိသည်။

  • curl_multi_info_read : တောင်းဆိုမှုတစ်ခုပြီးစီးခြင်းရှိမရှိစစ်ဆေးပြီးပြီးပြည့်စုံသောလက်ကိုင်များကိုတစ်ကြိမ်တွင်ပြုလုပ်နိုင်သည်။

  • curl_multi_close ကို $ running == 0 နှင့် Clone လက်ကိုင်လက်ကိုင်အားလုံးကိုဖယ်ရှားပြီးပိတ်လိုက်သည်။

အကြံပေးချက်များ

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

  • curl_multi_select သည် တစ်ခါတစ်ရံတွင်ပြန်လည်ရောက်ရှိသည် .1 ဤကိစ္စတွင်သင် STAY LOOP ကိုကာကွယ်ရန်စောင့်ဆိုင်းနေသည့်အတွက် USleep () ကို သုံးရန်လိုအပ်သည်။

Select Returning -1 ၏ရိုးရှင်းသောအပြောင်းအလဲအတွက်ဥပမာ -

 if (curl_multi_select($multiHandle) == -1) {
    usleep(100);
}

၎င်းသည် script သည်ပိုမိုအားကောင်းနေကြောင်းသေချာစေသည်။

အကျဉ်းချုပ်

curl_multi_close မသုံးမီသော့ချက်သည် Subrequests အားလုံးကိုမှန်ကန်စွာသန့်ရှင်းစင်ကြယ်စွာသန့်ရှင်းစင်ကြယ်ကြောင်းအတည်ပြုရန်ဖြစ်သည်။ အထက်ပါပုံစံသည်ဘုံနှင့်အကြံပြုသည့်စံလေ့ကျင့်မှုဖြစ်သည်။
curl_multi_ * စီးရီး၏အပြုအမူကိုနားလည်ခြင်းသည်ပိုမိုထိရောက်သောနှင့်တည်ငြိမ်သောတစ်ပြိုင်နက်တည်းကွန်ယက်တောင်းဆိုမှုကုဒ်ကိုရေးရန်ကူညီလိမ့်မည်။