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

curl_multi_clocky asynchronous တောင်းဆိုမှုအတွက်အမိန့်ကိုဆက်လက်ထိန်းသိမ်းထားဖို့ဘယ်လို

gitbox 2025-05-12

ဆံပင်ကောက်ကောက် သည် PHP တွင်အလွန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သော HTTHRON HTTP တောင်းဆိုမှုများပြုလုပ်သောအခါဖြစ်သည်။ curl_multi_ * function ကို သုံး. developer များသည်စွမ်းဆောင်ရည်တိုးတက်စေရန်တစ်ချိန်တည်းတွင်တောင်းဆိုမှုများကိုစတင်နိုင်ပါသည်။ curl_multi_clock function ကို curl session များစွာကိုပိတ်ရန်အသုံးပြုသည်။ သို့သော်ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများပြုလုပ်သောအခါတုံ့ပြန်မှုအမိန့်ကိုသင်မည်သို့သေချာစေသနည်း။ ဘာဖြစ်လို့လဲဆိုတော့ curl_multi_exec က တောင်းဆိုမှုများအတွက်တုန့်ပြန်မှုတွေကိုပြန်ပို့နိုင်ပြီးဒီတုန့်ပြန်မှုတွေကိုဖြည့်စွက်နိုင်တဲ့အမိန့်ကသူတို့တောင်းဆိုထားတဲ့အမိန့်နဲ့မတူဘူး။

ဤဆောင်းပါးသည်ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများ၏ရလဒ်များကို curl_multi_close ကို အသုံးပြုသောအခါတောင်းဆိုမှုများအစဉ်အဆက်ကိုမည်သို့သေချာစေနိုင်ကြောင်းအသေးစိတ်ရှင်းပြပါလိမ့်မည်။

1 ။ curl_multi_ * function ကဘာလဲ။

curl_multi_ * လုပ်ဆောင်ချက်များသည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများမှတစ်ဆင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်နည်းလမ်းတစ်ခုပေးသည်။ အသုံးအများဆုံးလုပ်ဆောင်ချက်များစွာတွင်အသုံးပြုသောလုပ်ဆောင်ချက်များပါဝင်သည်။

  • curl_multi_init () - ဆံပင်ကောက်ကောက်လက်ကိုင်ကို အစပြု. curl အရင်းအမြစ်ရေကန်တစ်ခုဖန်တီးပါ။

  • curl_multi_add_handle () : curl တောင်းဆိုမှုရေကန်ကိုဆံပင်ကောက်ကောက်ကိုထည့်သည်။

  • curl_multi_exec () : curl တောင်းဆိုမှုများကိုကွပ်မျက်ခံရ။

  • curl_multi_getcontent () - တောင်းဆိုမှုတစ်ခုစီ၏တုန့်ပြန်မှုအကြောင်းအရာကိုရယူပါ။

  • curl_multi_close () : curl တောင်းဆိုမှုရေကူးကန်ကိုပိတ်ပြီးအရင်းအမြစ်များကိုထုတ်ပေးပါ။

ဤလုပ်ဆောင်ချက်များသည်ပြတ်ပြတ်သားသားတောင်းဆိုမှုများကိုပြုလုပ်ရန်အတွက်အတူတကွအသုံးပြုသည်။ သို့သော်တုန့်ပြန်မှုပြီးစီးမှုအပြီးတွင်တောင်းဆိုမှုများအစဉ်အလာနှင့်ကွဲပြားနိုင်သည်။

2 ။ ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုရလဒ်အနေဖြင့်မည်သို့သေချာစေနိုင်သနည်း။

ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများပြုလုပ်သောအခါ curl_mamulti_exec သည် နောက်ခံရှိတောင်းဆိုမှုများကိုတစ်ချိန်တည်းတွင်အစပြုရန်နှင့်တောင်းဆိုမှုများအားလုံးကိုဖြည့်စွက်ရန်စောင့်ဆိုင်းလိမ့်မည်။ သို့သော်ဤတောင်းဆိုမှုများ၏ပြီးစီးချိန်သည်ခန့်မှန်းရခက်သည်, ထို့ကြောင့်သူတို့၏တုန့်ပြန်မှုအမိန့်ပြတ်တောက်သွားနိုင်သည်။

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

ဤတွင်အကောင်အထည်ဖော်မှုဥပမာတစ်ခုဖြစ်သည်။

3 ။ PHP နမူနာကုဒ်

 <?php

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

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

// မေးမြန်းလက်ကိုင်数组
$curl_handles = [];
$responses = [];
$index = 0;

// တောင်းဆိုမှုတစ်ခုစီအတွက်ဖန်တီးပါ cURL လက်ကိုင်并添加到 multi လက်ကိုင်中
foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    
    // တစ်ခုချင်းစီကိုတောင်းဆိုမှု၏အညွှန်းကိန်းမှတ်တမ်းတင်,ဒါကြောင့်တုံ့ပြန်မှုနိုင်ရန်အတွက်လုပ်ငန်းများ၌နေကြသည်
    curl_multi_add_handle($mh, $ch);
    
    // 将လက်ကိုင်与索引关联
    $curl_handles[(string)$ch] = $index++;
}

// အားလုံးလုပ်ဆောင် cURL မေးမြန်း
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh); // ဒေတာပြန်ရောက်သည်အထိ program ကိုစောင့်ပါစေ
} while ($running > 0);

// 读取每个မေးမြန်း的响应,并按မေးမြန်း的顺序保存结果
foreach ($curl_handles as $ch => $index) {
    $response = curl_multi_getcontent($ch);
    $responses[$index] = $response; // အညွှန်းကိန်းအားဖြင့်တုံ့ပြန်မှုကိုသိမ်းဆည်းပါ
    curl_multi_remove_handle($mh, $ch); // 移除လက်ကိုင်
    curl_close($ch); // 关闭每个လက်ကိုင်
}

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

// output တုံ့ပြန်မှုရလဒ်,确保按照မေးမြန်း顺序输出
foreach ($responses as $response) {
    echo $response . PHP_EOL;
}
?>

4 ။ code ခွဲခြမ်းစိတ်ဖြာ

4.1 တောင်းဆိုမှုများနှင့်တုံ့ပြန်မှုများအမိန့်

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

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

4.2 asynchronous ကွပ်မျက်ခြင်းနှင့်စောင့်ဆိုင်း

တောင်းဆိုမှုများအားလုံးကို curl_mamulti_exec ကို အသုံးပြု. အကောင်အထည်ဖော်သောအခါကွပ်မျက်ခံရဆဲသောတောင်းဆိုမှုများအရေအတွက်ကိုညွှန်ပြရန်အသုံးပြုသော parameter သည်အသုံးပြုသော အသုံးပြုမှု parameter သည်ကွပ်မျက်ခံရဆဲဖြစ်သည်။ curl_multi_select သည် တောင်းဆိုမှုမပြီးစီးမှီအချက်အလက်များမပြန်မလာမီမည်သည့်ဒေတာကိုမပြန်မရသောအခါ, CPU အရင်းအမြစ်များကိုမဖြုန်းတီးပါ။

4.3 အရင်းအမြစ်များကိုဖြန့်ချိ

နောက်ဆုံးအနေဖြင့်ကျွန်ုပ်တို့သည် curl_multi_remove_handle နှင့် curl_close အားလုံးကိုပိတ်ထားသည်

5 ။ အကျဉ်းချုပ်

Associative Array ကိုကျိုးကြောင်းဆီလျော်စွာအသုံးပြုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများပြုလုပ်သည့်အခါတုံ့ပြန်မှုရလဒ်များကိုတောင်းဆိုမှုများအရပြန်လာသည်။ PHP တွင်ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများအတွက် curl_multi_ * လုပ်ဆောင်ချက်များကိုအသုံးပြုသောအခါ, အထူးသဖြင့် interfaces များထံမှတုံ့ပြန်မှုများကိုကိုင်တွယ်သောအခါအမိန့်ကိုထိန်းသိမ်းရန်အရေးကြီးသည်။ ဤဥပမာမှတစ်ဆင့် PHP တွင်ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများကိုမည်သို့ပြုလုပ်ရမည်,