PHP တွင် curl_multi function ကိုအသုံးပြုသောအခါ, သင်သည်ဘုံအခြေအနေကိုကြုံတွေ့ရသောအခါ, အပြိုင်အဆက်အသွယ်ပေါင်းစုံအပြောင်းအလဲပြုလုပ်နေစဉ်အတွင်း curl_multi_close () သည် လက်ရှိဆက်လက်ဖြစ်ပွားနေသောတောင်းဆိုမှုကိုနှောင့်ယှက်နိုင်သည်။ ဤပြ problem နာသည်တစ်ခါတစ်ရံပရိုဂရမ်ကိုတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုချောချောမွေ့မွေ့ချောချောမွေ့မွေ့ပြီးချောချောမွေ့မွေ့ပြုလုပ်ရန်ပျက်ကွက်သည်။ ထို့ကြောင့်ဤပြ problem နာကိုရှောင်ရန်သင့်လျော်သောအစီအမံများလိုအပ်သည်။ ဤဆောင်းပါးသည်တောင်းဆိုမှုဖြစ်စဉ်ကာလအတွင်း curl_multi_close ၏ပြ problem နာကိုမည်သို့ထိထိရောက်ရောက်ကိုင်တွယ်နိုင်မည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။
curl_mamulti_close () သည် Curl_multi_init မှဖန်တီးထားသော curl extribles ကိုပိတ်ရန် PHP ၏ဆံပင်ကောက်ကောက်တိုးချဲ့ခြင်းမှပေးသော function တစ်ခုဖြစ်သည်။ ၎င်း၏ function မှာအရင်းအမြစ်ကိုထုတ်လွှတ်ရန်ဖြစ်သည်။ သို့သော်တောင်းဆိုမှုဖြစ်စဉ်ကာလအတွင်း function ကိုကြိုတင်ခေါ်ဝေါ်ကြပါကမပြီးဆုံးသေးသောတောင်းဆိုမှုကိုနှောင့်ယှက်ရန်ဖြစ်နိုင်သည်။ ၎င်းသည်ဒေတာဆုံးရှုံးမှုသို့မဟုတ်မပြည့်စုံသောတောင်းဆိုမှုများကိုဖြစ်ပေါ်စေနိုင်သည်, ၎င်းသည်စနစ်၏တည်ငြိမ်မှုနှင့်စွမ်းဆောင်ရည်ကိုအကျိုးသက်ရောက်စေနိုင်သည်။
ဤတွင်ရိုးရှင်းသော curl_mamulti တောင်းဆိုမှုဥပမာတစ်ခုဖြစ်သည်။
<?php
// ဖြစ်ပေါ်လာခြင်း curl_multi လက်ကိုင်
$mh = curl_multi_init();
// မျိုးစုံဖန်တီးပါ cURL လက်ကိုင်
$ch1 = curl_init("http://gitbox.net/api/data1");
$ch2 = curl_init("http://gitbox.net/api/data2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// တစ်ခုချင်းစီကိုထည့်ပါ cURL လက်ကိုင်添加到 multi လက်ကိုင်中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ
$running = null;
do {
$mrc = curl_multi_exec($mh, $running);
} while ($running > 0);
// ပြန်လာသောဒေတာကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// ရုပ်သိမ်းခြင်း cURL လက်ကိုင်
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// ရုပ်သိမ်းခြင်း multi လက်ကိုင်
curl_multi_close($mh);
?>
ဒီဥပမာမှာ curl_multi_add_add_addle () မှတဆင့်လက်ကိုင် $ MH ကိုလက်ကိုင် $ MH အတွက် curl furlles အများကြီးထည့်သွင်းနှင့် curl_mamulti_exec မှတဆင့်တောင်းဆိုမှုများအားလုံးကို execute ။ နောက်ဆုံးအနေဖြင့်ကျွန်ုပ်တို့သည်လက်ကိုင်ကို curl_multi_remove_handle () နှင့် curl_mamulti_close () နှင့် curl_mamulti_close () ကို ပိတ်လိုက်သည်။
curl_multi_close () ကိုဟုခေါ်သောကြောင့်ပြ problem နာမှာမူကိုင်တွယ်မှုမျိုးစုံကိုကြိုတင်မဲမျိုးစုံကိုပိတ်နိုင်ပြီး, တောင်းဆိုမှုများအားလုံးကိုမပြီးဆုံးပါကကြားဖြတ်ချက်အရတွေ့ရှိပါကမပြီးဆုံးသေးသောတောင်းဆိုမှုသည်တုန့်ပြန်မှုအချက်အလက်များသို့မဟုတ်ရလဒ်များကိုပြန်လည်ပေးပို့ခြင်းကိုရယူနိုင်မည်မဟုတ်ပါ။
curl_multi_close () ကိုသေချာစေရန်တောင်းဆိုချက်ကိုမနှောင့်ယှက်ရန်အောက်ပါနည်းလမ်းများကိုအသုံးပြုနိုင်သည်။
အသုံးအများဆုံးဖြေရှင်းနည်းမှာတောင်းဆိုမှုများအားလုံးကိုပြီးစီးပြီး curl_mamulti_close () ဟုခေါ်ရန်သေချာစေရန်ဖြစ်သည်။ သင်တောင်းဆိုမှုများအားလုံးကိုပြီးစီးခြင်းရှိမရှိဆုံးဖြတ်ရန် curl_multi_exec () ၏ပြန်လာတန်ဖိုးကိုသင်အသုံးပြုနိုင်သည်။ runvariable variable ၏တန်ဖိုး 0 သည် 0 ကိုဆိုလိုသည်, ဆိုလိုသည်မှာတောင်းဆိုမှုများအားလုံးကိုပြီးစီးခဲ့သည်။ သို့မှသာ curl_multi_close () ကိုခေါ်သည်။
ပြုပြင်ထားသောကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
<?php
// ဖြစ်ပေါ်လာခြင်း curl_multi လက်ကိုင်
$mh = curl_multi_init();
// မျိုးစုံဖန်တီးပါ cURL လက်ကိုင်
$ch1 = curl_init("http://gitbox.net/api/data1");
$ch2 = curl_init("http://gitbox.net/api/data2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// တစ်ခုချင်းစီကိုထည့်ပါ cURL လက်ကိုင်添加到 multi လက်ကိုင်中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ
$running = null;
do {
$mrc = curl_multi_exec($mh, $running);
// နှေးနှေးနှေးနှေးနှေးနှေးကွေးနေသည် CPU အသုံးပြုမှုနှုန်း
usleep(100);
} while ($running > 0);
// ပြန်လာသောဒေတာကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// ရုပ်သိမ်းခြင်း cURL လက်ကိုင်
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// ရုပ်သိမ်းခြင်း multi လက်ကိုင်
curl_multi_close($mh);
?>
တောင်းဆိုမှု သည် အ လုပ်မလုပ် သည့်အထိ အစဉ်မပြတ် ကွပ်မျက်ခံရစဉ်အတွင်းကွင်းဆက်မှတစ်ဆင့်ဆက်လုပ်ပါ။
တစ်ခါတစ်ရံတွင်တောင်းဆိုမှုများအားလုံးကိုပြီးဆုံးသွားသော်လည်းကွန်ယက်ပြတ်တောက်မှုများကဲ့သို့သောပြ problems နာများကြောင့်သူတို့ပြတ်တောက်သွားနိုင်သည်။ ဤအချိန်တွင်တောင်းဆိုမှုပျက်ကွက်သည့်အခါသင်ပြန်လည်ကြိုးစားခြင်းကိုသင်စဉ်းစားနိုင်သည်။
<?php
// Retry Times အများဆုံးအရေအတွက်ကိုသတ်မှတ်ပါ
$maxRetries = 3;
function performRequest($ch, $maxRetries) {
$retryCount = 0;
$response = null;
while ($retryCount < $maxRetries) {
$response = curl_exec($ch);
if ($response !== false) {
break;
}
$retryCount++;
usleep(500000); // နောက်တဖန်မကြိုးစားမီခဏစောင့်ပါ
}
return $response;
}
// ဖြစ်ပေါ်လာခြင်း curl_multi လက်ကိုင်
$mh = curl_multi_init();
// မျိုးစုံဖန်တီးပါ cURL လက်ကိုင်
$ch1 = curl_init("http://gitbox.net/api/data1");
$ch2 = curl_init("http://gitbox.net/api/data2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// တစ်ခုချင်းစီကိုထည့်ပါ cURL လက်ကိုင်添加到 multi လက်ကိုင်中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ
$running = null;
do {
$mrc = curl_multi_exec($mh, $running);
} while ($running > 0);
// ပြန်လာသောဒေတာကိုရယူပါ,ထပ်ကြိုးစားပါ
$response1 = performRequest($ch1, $maxRetries);
$response2 = performRequest($ch2, $maxRetries);
// ရုပ်သိမ်းခြင်း cURL လက်ကိုင်
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// ရုပ်သိမ်းခြင်း multi လက်ကိုင်
curl_multi_close($mh);
?>
အထက်ဖော်ပြပါကုဒ်များတွင်အမြင့်ဆုံးပြန် စာရင်း မရောက်မှီတိုင်အောင်တောင်းဆိုမှုပျက်ကွက်သောအခါတောင်းဆိုမှုသည်ပျက်ကွက်သည့်အခါကြိုးစားခြင်းသည်ပြန်လည်ကြိုးစားသည်။ ၎င်းသည်ကွန်ရက်ပြ problems နာများကြောင့်တောင်းဆိုမှုပြတ်တောက်မှုများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။
curl_mamulti_select () PHP အစီအစဉ်များသည်တောင်းဆိုမှုများကိုပိုမိုထိရောက်စွာကိုင်တွယ်နိုင်အောင်ကူညီနိုင်ပြီး curl_multi_exec () ကို curl_multi_exec () ကိုရှောင်ရှားရန်ကူညီနိုင်သည်။ ၎င်းသည်အချို့သောအခြေအနေများနှင့်ကိုက်ညီမှုရှိသည့်အခါ၎င်းသည်စနစ်အရင်းအမြစ်များကိုသိမ်းဆည်းနိုင်သည့်အတွက်တောင်းဆိုမှုကိုဆက်လက်လုပ်ဆောင်သွားမည်ဖြစ်သည်။
<?php
// ဖြစ်ပေါ်လာခြင်း curl_multi လက်ကိုင်
$mh = curl_multi_init();
// မျိုးစုံဖန်တီးပါ cURL လက်ကိုင်
$ch1 = curl_init("http://gitbox.net/api/data1");
$ch2 = curl_init("http://gitbox.net/api/data2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// တစ်ခုချင်းစီကိုထည့်ပါ cURL လက်ကိုင်添加到 multi လက်ကိုင်中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ
$running = null;
do {
curl_multi_select($mh);
$mrc = curl_multi_exec($mh, $running);
} while ($running > 0);
// ပြန်လာသောဒေတာကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// ရုပ်သိမ်းခြင်း cURL လက်ကိုင်
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// ရုပ်သိမ်းခြင်း multi လက်ကိုင်
curl_multi_close($mh);
?>
curl_multi_select () မရရှိနိုင်သည့်အချက်အလက်များမရှိပါကစောင့်ဆိုင်းနိုင်သော်လည်းမလိုအပ်သော CPU အသုံးပြုမှုကိုရှောင်ရှားနိုင်သည်။ ၎င်းသည်အထူးသဖြင့်တောင်းဆိုမှုများစွာရှိသည့်အခါ၎င်းသည်ပိုမိုထိရောက်သောနည်းလမ်းဖြစ်သည်။