လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> curl_multi_exec () နှင့် curl_share_init () နှင့် curl_share_init () နှင့် curl_share_init () ကိုပေါင်းစပ်ရန်

curl_multi_exec () နှင့် curl_share_init () နှင့် curl_share_init () နှင့် curl_share_init () ကိုပေါင်းစပ်ရန်

M66 2025-05-18

မျက်မှောက်ခေတ်ဝဘ်ဆိုက်ဖွံ့ဖြိုးတိုးတက်မှုတွင် HTTP တောင်းဆိုမှုအမြောက်အများကိုကိုင်တွယ်ခြင်း, ဤအဆုံးတွင် Php သည် curl_multi_ * စီးရီးလုပ်ငန်းများကို curl_share_ * series များအနေဖြင့်ပိုမိုကောင်းမွန်စေရန် curl_share_ * စီးရီးများအကြားအရင်းအမြစ်များ (ဥပမာ DNS cache) ကိုဝေမျှနိုင်သည်။ ထိရောက်သောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုကိုရရှိရန် curl_multi_exec () နှင့် curl_share_init () ကိုမည်သို့ပေါင်းစပ်မည်ကိုဤဆောင်းပါးကမိတ်ဆက်ပေးလိမ့်မည်။

1 ?? ဘာဖြစ်လို့ curl_multi_ * ကိုဘာကြောင့်သုံးတာလဲ။

curl_multi_ * လုပ်ဆောင်ချက်များသည်တစ်ချိန်တည်းတွင်မစောင့်ဘဲ http တောင်းဆိုမှုများကိုတစ်ချိန်တည်းတွင်တစ်ချိန်တည်းပို့ရန်ခွင့်ပြုသည်။ ၎င်း၏အဓိကလုပ်ငန်းတော်သည်:

  1. multi multi multi လက်ကိုင် ( curl_maulti_init ) ကိုစတင်ပါ။

  2. Multi Multipi Multipi Multies မှလွယ်ကူသောလက်ကိုင်များ ( curl_init ) ထည့်ပါ။

  3. curl_multi_exec () ကိုသုံးပါ။

  4. curl_multi_select ( CPU Idle ကိုရှောင်ကြဉ်ပါ။

  5. ရလဒ်များနှင့်အနီးကပ်အရင်းအမြစ်များကိုစုဆောင်း။

ဤနည်းလမ်းသည် Crawlers များ, Interface Agtaging, CDN Preheating စသည့်တစ်ချိန်တည်းတွင်လုပ်ဆောင်ရန်တောင်းဆိုမှုများအတွက်တောင်းဆိုမှုများအမြောက်အများလိုအပ်သည့်အခြေအနေများအတွက်အထူးသဖြင့်သင့်လျော်သည်။

2 ?? curl_share_ * *? အဘယ်ကြောင့်ပေါင်းစပ်အသုံးပြု?

curl_multi_ * သည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပေးပို့နိုင်သည်, ဥပမာအားဖြင့် DNS ကိုသီးခြားစီအနေဖြင့် dns များအားလုံးကိုသီးခြားစီဖြေရှင်းရန်လိုအပ်သည်။

အဓိကအဆင့်များမှာ -

  1. curl_share_init () ကိုမျှဝေထားသောအရာဝတ်ထုတစ်ခုဖန်တီးရန် () ကိုသုံးပါ။

  2. curl_share_setopt () ကိုသုံးပါ (ဥပမာ curlshopt_share)

  3. လွယ်ကူသောလက်ကိုင်တစ်ခုအားမျှဝေထားသောအရာဝတ်ထုတစ်ခုကိုတပ်ဆင်ရန် Curl_setop ($ ch, curlopt_share, $ share) ကို သုံးပါ။

  4. တောင်းဆိုမှုပြီးဆုံးပြီးနောက်မျှဝေထားသောအရာဝတ်ထုကိုလွှတ်ပါ။

3 ?? ဥပမာအပြည့်အစုံ: တစ်ပြိုင်နက်တည်းတောင်းဆိုချက် + Shars cache ကို shared dns cache

ဤတွင်အမှန်တကယ် runnable သော PHP ကုဒ်၏ဥပမာတစ်ခုမှာ -

 <?php

// တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများလိုအပ်သည်URLစာရင်း
$urls = [
    'https://m66.net/api/endpoint1',
    'https://m66.net/api/endpoint2',
    'https://m66.net/api/endpoint3',
    'https://m66.net/api/endpoint4'
];

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

// တစ် ဦး မျှဝေအရာဝတ်ထုကိုဖန်တီးပါ
$shareHandle = curl_share_init();
curl_share_setopt($shareHandle, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

// တစ်ခုချင်းစီကိုသိမ်းထားပါ easy handle
$curlHandles = [];

foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SHARE, $shareHandle);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$url] = $ch;
}

// တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများဖျော်ဖြေ
$active = null;
do {
    $mrc = curl_multi_exec($multiHandle, $active);
    if ($mrc == CURLM_CALL_MULTI_PERFORM) {
        continue;
    }
    curl_multi_select($multiHandle);
} while ($active && $mrc == CURLM_OK);

// ရလဒ်များကိုစုဆောင်း
$responses = [];
foreach ($curlHandles as $url => $ch) {
    $responses[$url] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// ရုပ်သိမ်းခြင်း multi handle နှင့် share handle
curl_multi_close($multiHandle);
curl_share_close($shareHandle);

// ရလဒ်များကိုပုံနှိပ်
foreach ($responses as $url => $content) {
    echo "Response from $url:\n";
    echo $content . "\n\n";
}

4 ?? optimization ၏အဓိကအချက်များအကျဉ်းချုပ်

? Curl_multi_ ကို တစ်ပြိုင်နက်တည်းတိုးတက်အောင်လုပ်ရန် * တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ပါ။
? Dop-overhead ကိုသိမ်းရန် curl_share_ ကိုသုံးပါ ။ DNS cache ကဲ့သို့သောအရင်းအမြစ်များကိုမျှဝေခြင်းဖြင့်မတူကွဲပြားသောခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်တိုးတက်မှုများကိုရှောင်ပါ။
? သတိပြုရန် - တောင်းဆိုမှုပြီးဆုံးသွားသောအခါလွယ်ကူသောလက်ကိုင်တစ်ခုချင်းစီ, Multi Multi Multi Multipi နှင့် Share Shair Hander ကိုထုတ်လွှတ်ရန်သတိရပါ။
? curl_multi_select () နှင့်ပေါင်းစပ်ခြင်း () - CPU နေရာ 100% ကိုရှောင်ရှားရန်ကွန်ယက်လှုပ်ရှားမှုအတွက်စောင့်ပါ။

5 ?? သက်ဆိုင်တဲ့အခြေအနေများ

  • မြင့်မားသောတစ်ပြိုင်နက်တည်း interface ကိုစုစည်းခြင်းတောင်းဆိုမှုများ။

  • ကြီးမားသောစာမျက်နှာများသို့မဟုတ်ဖိုင်များ၏ကြီးမားသောနံပါတ်များကိုတွား။

  • ဝဘ်ဆိုက်စောင့်ကြည့်လေ့လာခြင်းနှင့်ကျန်းမာရေးစစ်ဆေးမှုများ။

  • CDN သို့မဟုတ် cache နွေး -up,

curl_multi_exec () နှင့် curl_share_init ကို အသုံးပြုခြင်းသည်စစ်မှန်တဲ့တစ်ပြိုင်နက်တည်းကိုအောင်မြင်နိုင်ရုံသာမက PHP ကိုပါ 0 င်သည့်ကွန်ယက်တောင်းဆိုမှုများကိုကိုင်တွယ်ရာတွင် PHP ကိုပိုမိုထိရောက်စွာလုပ်ဆောင်ခြင်းအားဖြင့် ထပ်မံ. လုပ်ခြင်းကိုလျှော့ချနိုင်သည်။

အကယ်. သင်သည်အမှန်တကယ် applications များတွင် optimization bottlenecks များကိုသင်ကြုံတွေ့ရပါက connection pooling, task scheduleing, rounch scheduing, ခြွင်းချက်ကိုင်တွယ်ခြင်းနှင့်အခြားနည်းလမ်းများကိုလည်းပိုမိုဖြေရှင်းရန်နှင့်အခြားနည်းလမ်းများကိုပိုမိုဖြေရှင်းနိုင်သည်။