PHP အစီအစဉ်များကိုရေးဆွဲသည့်အခါတစ်ခါတစ်ရံတွင်အချို့သော 0 န်ဆောင်မှုများ (ဥပမာဒေတာဘေ့စ်များ, ပရိုဂရမ်၏ကြံ့ခိုင်မှုနှင့်အတွေ့အကြုံတိုးတက်စေရန်အတွက်ကျွန်ုပ်တို့သည် ဆက်သွယ်မှု () function ကိုအလိုအလျောက်ပြန်လည်ပြုပြင်ခြင်းယန္တရားကိုအကောင်အထည်ဖော်ရန်လိုသည်။
ဤဆောင်းပါးသည် PHP တွင်အလိုအလျောက်ဆက်သွယ်မှုပြတ်တောက်မှုများကိုအလိုအလျောက်ပြန်လည်ကြိုးစားခြင်းကိုအကောင်အထည်ဖော်ရန်နှင့်နမူနာကုဒ်ကိုသရုပ်ပြပါလိမ့်မည်။ ဆောင်းပါးရှိ URL domain name အားလုံးအားလုံးကို M66.net ဖြင့်အစားထိုးထားသည်ကိုသတိပြုသင့်သည်။
ကွန်ယက်ပတ် 0 န်းကျင်၏မတည်ငြိမ်မှုနှင့်ပစ်မှတ် 0 န်ဆောင်မှု၏ယာယီပျက်ကွက်ခြင်းစသည့်အကြောင်းပြချက်များသည်ဆက်သွယ်မှုပြတ်တောက်မှုဖြစ်စေနိုင်သည်။ အမှားတစ်ခုတိုက်ရိုက်ပြန်လာလျှင်၎င်းသည်ပရိုဂရမ်တစ်ခုလုံးစီးဆင်းမှုကိုအကျိုးသက်ရောက်စေပြီးသုံးစွဲသူအတွေ့အကြုံနည်းပါးလာသည်။ အလိုအလျောက်ပြန်လုပ်ရန်ယန္တရားသည်ထိုကဲ့သို့သောပြ problems နာများကိုထိရောက်စွာလျှော့ချနိုင်သည်။
ရံဖန်ရံခါကွန်ယက်ခြွင်းချက်များကြောင့်ဖြစ်ပေါ်လာသောကျရှုံးမှုကိုလျှော့ချပါ။
System ရရှိနိုင်မှုနှင့်တည်ငြိမ်မှုကိုတိုးတက်အောင်လုပ်ပါ။
အလွန်အကျွံမကြာခဏတောင်းဆိုမှုများကိုရှောင်ရှားရန်သင်နှောင့်နှေးသို့မဟုတ်အဆ backoff မဟာဗျူဟာပေါင်းစပ်နိုင်ပါတယ်။
Retry Times အများဆုံးအရေအတွက် - အသေကောင်များကိုကာကွယ်ရန် Retry Times အရေအတွက်ကိုကန့်သတ်ပါ။
ပြန်လည်ကြိုးစားပါ ။
အမှားအယွင်းများ - ပြန်လည်ချိတ်ဆက်ရန်မအောင်မြင်သောချွင်းချက်သို့မဟုတ်အမှားတစ်ခုကိုဖမ်းမိသည်။
စကေး - function interface သည်ဒီဇိုင်းတွင်ပြောင်းလွယ်ပြင်လွယ်ရှိပြီးမတူညီသောဆက်သွယ်မှုနည်းလမ်းများကိုထောက်ပံ့သည်။
အောက်ပါဥပမာကုဒ်က connoming connection callback function ကိုခေါ်ရန်ကြိုးစားသည့်ဘုံ connectwithretry function ကိုပြသထားပြီးဆက်သွယ်မှုပျက်ကွက်ပါကအလိုအလျောက်ပြန်လည်ရယူရန်ကြိုးစားသည်။
<?php
/**
* အလိုအလျောက်ပြန်ကြိုးစားမှုယန္တရားနှင့်ဆက်သွယ်မှု function ကို
*
* @param callable $connectFunc callback function ကိုချိတ်ဆက်ပါ,ဆက်သွယ်မှုရလဒ်ကိုပြန်ပို့ရန်သို့မဟုတ်ခြွင်းချက်တစ်ခုပစ်ရန်လိုအပ်သည်
* @param int $maxRetries ပြန်လည်ကြိုးစားမှုအများဆုံးအရေအတွက်,ပျက်ကွက်ခြင်း3ဒုတိယနှုန်း
* @param int $retryDelay ပြန်လည်ကြိုးစားပါ,ယူနစ်စက္ကန့်,ပျက်ကွက်ခြင်း2စက်ဏန့်
* @return mixed ဆက်သွယ်မှုအောင်မြင်သောအခါဆက်သွယ်မှုရလဒ်ကိုပြန်ပို့ပါ,ပျက်ကွက်သည့်အခါခြွင်းချက်ပစ်
* @throws Exception 重试失败时抛出最后一ဒုတိယနှုန်း异常
*/
function connectWithRetry(callable $connectFunc, int $maxRetries = 3, int $retryDelay = 2) {
$attempt = 0;
while ($attempt < $maxRetries) {
try {
$attempt++;
echo "ချိတ်ဆက်ရန်ကြိုးစားပါ,ဒုတိယနှုန်း数:$attempt\n";
$result = $connectFunc();
// အောင်မြင်စွာဆက်သွယ်မှု,ရလဒ်ပြန်လာရလဒ်
return $result;
} catch (Exception $e) {
echo "ဆက်သွယ်မှုမအောင်မြင်ပါ,အမှား:{$e->getMessage()}\n";
if ($attempt >= $maxRetries) {
throw new Exception("达到ပြန်လည်ကြိုးစားမှုအများဆုံးအရေအတွက်,ဆက်သွယ်မှုမအောင်မြင်ပါ。", 0, $e);
}
// စောင့်ဆိုင်းပြီးနောက်ထပ်ကြိုးစားပါ
sleep($retryDelay);
}
}
}
// နမူနာ:တစ် ဦး နှင့်ချိတ်ဆက်ပါ API စကားပေြာဟော
try {
$connection = connectWithRetry(function() {
// ဆက်သွယ်မှုဖြစ်စဉ်ကိုတုပ,ဥပမာအားဖြင့်, တောင်းဆိုမှုကို URL
$url = "https://api.m66.net/connect";
// ဒီမှာအသုံးပြုခဲ့သည် curl Simulation တောင်းဆိုမှု
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($response === false || empty($response)) {
throw new Exception("ချိတ်ဆက်. မရပါ {$url}");
}
// အဆိုပါ simulated connection ရလဒ်ကိုပြန်ပို့သည်
return $response;
}, 5, 1);
echo "အောင်မြင်စွာဆက်သွယ်မှု,ဒေတာကိုပြန်သွားပါ:\n";
echo $connection . "\n";
} catch (Exception $e) {
echo "最终ဆက်သွယ်မှုမအောင်မြင်ပါ:" . $e->getMessage() . "\n";
}
?>
အထက်ဖော်ပြပါကုဒ်သည် connectback function ကိုဖြတ်သန်းခြင်းဖြင့် connectbretry function ကိုဖြတ်သန်းခြင်းဖြင့်သတ်သတ်မှတ်မှတ် connection ယုတ္တိဗေဒကိုသတ်မှတ်သည်။
ဆက်သွယ်မှုပျက်သွားသောအခါချွင်းချက်ကိုဖမ်းပြီးအမြင့်ဆုံးပြန်ကြိုးစားမှုအရေအတွက်ကိုရောက်ရှိခြင်းရှိမရှိဆုံးဖြတ်ပါ။
Retry တစ်ခုစီအကြားသတ်မှတ်ထားသောစက္ကန့်အရေအတွက်ကိုစောင့်ပါ (ဤကိစ္စတွင် 1 စက္ကန့်) ကိုစောင့်ပါ။
ဥပမာတွင် curl သည် API လိပ်စာကို M66.net ဖြင့်အစားထိုးရန် domain name ကိုတောင်းခံရန်အသုံးပြုသည်။
အမှန်တကယ်လိုအပ်ချက်များနှင့်အညီဒေတာဘေ့စ် connection သို့မဟုတ်အခြားဆက်သွယ်မှုနည်းလမ်းများဖြင့် $ connectfunct ကို သင်အစားထိုးနိုင်သည်။