curl_multi_ * စီးရီးလုပ်ဆောင်ချက်များသည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများအတွက် PHP ၏ curl extension ကိုအသုံးပြုသောအခါအလွန်အရေးကြီးသောကိရိယာများဖြစ်သည်။ curl_multi_close သည် လက်ကိုင်ပေါင်းများစွာကို ပိတ်ရန်အတွက်တာဝန်ရှိသည်။ သို့သော်မသင့်လျော်စွာအသုံးပြုပါကပုံမှန်မဟုတ်သောဆက်သွယ်မှုအခြေအနေကိုအလွယ်တကူဖြစ်ပေါ်နိုင်သည်။ ဒါဆိုဒီခြွင်းချက်တွေကိုလျောက်ပတ်စွာနဲ့မှန်ကန်စွာဘယ်လိုရှောင်ရှားနိုင်မလဲ။ ဤဆောင်းပါးသည်အသေးစိတ်ရှင်းပြပါလိမ့်မည်။
Developeriers များကတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပြုလုပ်သောအခါ code သည်ဤပုံနှင့်တူနိုင်သည်။
<?php
$mh = curl_multi_init();
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('https://gitbox.net/api/endpoint2');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// စတင်နှင့် execute
do {
$status = curl_multi_exec($mh, $active);
curl_multi_select($mh);
} while ($active && $status == CURLM_OK);
// တိုက်ရိုက်ပိတ်ပါ
curl_multi_close($mh);
ဤစာအရေးအသားနည်းလမ်းပါ 0 င်သည့်ပြ problem နာမှာတောင်းဆိုမှုကိုအပြည့်အဝမလုပ်ဆောင်နိုင်သည့်တိုင် (အထူးသဖြင့်ကွန်ယက်အခြေအနေများညံ့ဖျင်းသောအခါ) curl_multi_close ကိုတိုက်ရိုက်ဟုခေါ်သည်။
curl_multi_close ကို မခေါ်မီ, လက်ကိုင် ( ဆံပင်ကြိုး ) လက်ကိုင်များအားလုံးကိုလုပ်ဆောင်နိုင်အောင်သေချာအောင်လုပ်သင့်သည်။ မှန်ကန်သောဖြစ်စဉ်ကိုဖြစ်သင့်သည်:
curl_multi_exec ကို တောင်းဆိုမှုများအားလုံးပြီးဆုံးသည်အထိထပ်ခါတလဲလဲဟုခေါ်သည်။
တစ်ခုချင်းစီကိုတစ် ဦး ချင်းစီဆံပင်ကောက်ကောက်လက်ကိုင် ( curl_maulti_remove_handle ) ကိုဖယ်ရှားပေးသည်။
သီးခြားဆံပင်ကောက်ကောက်လက်ကိုင် ( curl_close ) ကိုသီးခြားစီပိတ်ပါ။
နောက်ဆုံးတွင် Multi Multi Multi Multi ( Curl_maulti_close ) ပိတ်ပါ။
ပြုပြင်ထားသောကုဒ်ဥပမာမှာအောက်ပါအတိုင်းဖြစ်သည် -
<?php
$mh = curl_multi_init();
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('https://gitbox.net/api/endpoint2');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// စတင်နှင့် execute
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
// တစ်ခုတည်းဖယ်ရှားခြင်းနှင့်ပိတ်ပါ handle
curl_multi_remove_handle($mh, $ch1);
curl_close($ch1);
curl_multi_remove_handle($mh, $ch2);
curl_close($ch2);
// နောက်ဆုံးအနီးကပ် multi handle
curl_multi_close($mh);
curl_multi_remove_handle ကို curl_multi_close မတိုင်မီပြုလုပ် ရမည် ။
ဆက်သွယ်မှုကိုတောင်းဆိုရန်ပျက်ကွက်လျှင်ပင်၎င်းကို Remove_Handle + အနီးကပ် မှတဆင့်မှန်ကန်စွာသန့်ရှင်းရေးလုပ်ရမည်။
curl_multi_Multi_Select ကိုကွင်းဆက်တစ်ခုတွင် CPU အသုံးပြုမှုကိုလျှော့ချပြီးအလုပ်များစောင့်ဆိုင်းခြင်းမှရှောင်ရှားနိုင်သည်။
အမှားများကို (ဥပမာ Curl_errno နှင့် curl_error ) ကိုဖမ်းရန်ကြိုးစားပါ။
မြင့်မားသောတစ်ပြိုင်နက်တည်းဖြစ်ရပ်များတွင်အသေးစိတ်အချက်အလက်များကိုအောင်မြင်မှုသို့မဟုတ်ရှုံးနိမ့်မှုဆုံးဖြတ်ရန်။ curl_multi_close ၏အနှစ်သာရသည်လက်ကိုင်ပေါင်းများစွာကိုဖျက်ဆီးရန်သာဖြစ်သည်။ ထို့ကြောင့် Multi Multi Multi ကိုမပိတ်မီ, တစ် ဦး ချင်းစီလက်ကိုင်တစ်ခုချင်းစီကိုလက်ကိုင်တစ်ခုချင်းစီကိုဖယ်ရှားပြီးပိတ်ပါ။
မှန်ကန်သောအပြောင်းအလဲနဲ့လုပ်ထုံးလုပ်နည်းပြီးနောက်သင့်တစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုခေါင်းကိုက်နေသည့်လျှို့ဝှက် bug များနှင့်ဝေးလံခေါင်သီသည်။