လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> loop connection retry ယန္တရားတစ်ခုတည်ဆောက်ရန် Socket_Close_Error () ကိုသုံးပါ

loop connection retry ယန္တရားတစ်ခုတည်ဆောက်ရန် Socket_Close_Error () ကိုသုံးပါ

M66 2025-05-30

ကွန်ယက်ပရိုဂရမ်တွင်တည်ငြိမ်သောဆက်သွယ်မှုကိုထိန်းသိမ်းရန်အလွန်အရေးကြီးသည်, အထူးသဖြင့်ဖောက်သည်သည်ဆာဗာနှင့်ဆက်သွယ်သည့်အခါ။ PHP သည် Socket_Close_Error () သည်အတော်လေးဂရုမစိုက်သော်လည်းအလွန်အသုံးဝင်သောလုပ်ဆောင်ချက်များကို PHP သည် Socket opertion function များကိုပေါင်းစပ်ထားပါသည်။ ကွန်ယက်ဆက်သွယ်မှုတည်ငြိမ်မှုကိုတိုးတက်စေရန် loop connection retry ယန္တရားကိုအကောင်အထည်ဖော်ရန် Socket_Close_Error () function ကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကအသေးစိတ်ဖော်ပြထားသည်။


Socket_Close_Error () ?

The Socket_Close_Error () function ကိုသတ်မှတ်ထားသော socket ၏အမှားအယွင်းကိုရှင်းလင်းရန်အသုံးပြုသည်။ Socket တွင်အမှားတစ်ခုဖြစ်ပေါ်သောအခါအမှားအယွင်းများကိုဆက်လက်ထိန်းသိမ်းထားပြီးနောက်ဆက်တွဲစစ်ဆင်ရေးကိုထိခိုက်စေလိမ့်မည်။ ဒီ function ကိုဖုန်းခေါ်ဆိုခြင်းကအမှားအယွင်းကိုပြန်လည်စတင်နိုင်အောင် Socket ကိုပုံမှန်အသုံးပြုနိုင်ရန်ဆက်လက်အသုံးပြုနိုင်သည်။

function ရှေ့ပြေးပုံစံ:

 bool socket_clear_error ( resource $socket )

Parametermer

  • $ socket : အမှားအယွင်းအရင်းအမြစ်ကိုရှင်းလင်းဖို့။

Value ကိုပြန်သွားပါ

  • အောင်မြင်လျှင် အောင်မြင် ပါက အယူမှား မအောင်မြင်ပါကပြန်ပို့ပါ။


အဘယ်ကြောင့် loop retry ယန္တရားကိုအသုံးပြုပါ?

ကွန်ယက်ပတ် 0 န်းကျင်တွင်ဆက်သွယ်မှုပြတ်တောက်ခြင်းသို့မဟုတ်ပြတ်တောက်ခြင်းများသည်အထူးသဖြင့်ကွန်ယက်အတက်အကျများ, အလုပ်များသောဆာဗာများစသည်တို့ကြောင့်ပုံမှန်မဟုတ်သောကြောင့်ဖြစ်သည်။


အကောင်အထည်ဖော်မှုစိတ်ကူးများ

  1. socket အရင်းအမြစ်တစ်ခုဖန်တီးပါ။

  2. ဆာဗာကိုချိတ်ဆက်ရန်ကြိုးစားပါ။

  3. အကယ်. ဆက်သွယ်မှုသည်အမှားအယွင်းကိုရှင်းလင်းရန် Socket_clear_Error () ကိုခေါ်ဆိုပါ။

  4. ခဏစောင့်ပါ။ အောင်မြင်မှုအမြင့်ဆုံးသို့မဟုတ်အများဆုံးပြန်လည်နေရာချထားသည်အထိဆက်သွယ်မှုကိုထပ်မံကြိုးစားပါ။


Code Page

 <?php
$maxRetries = 5;            // ပြန်လည်ကြိုးစားမှုအများဆုံးအရေအတွက်
$retryInterval = 2;         // တစ်ခုချင်းစီကိုပြန်ကြိုးစားမှုအကြားစက္ကန့်အရေအတွက်
$attempt = 0;

$host = "m66.net";          // Target Domain Name
$port = 80;                 // ဆိပ်ကမ်းဆိပ်ကမ်း

while ($attempt < $maxRetries) {
    $attempt++;
    
    // ဖန်တီး TCP socket
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        echo "ဖန်တီးsocketဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n";
        break;
    }
    
    // ချိတ်ဆက်ရန်ကြိုးစားပါ
    $result = @socket_connect($socket, $host, $port);
    if ($result === false) {
        echo "1 ။ {$attempt} 次连接ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n";
        
        // ရှင်းလင်းသော socket အမှားအယွင်း
        socket_clear_error($socket);
        
        // လက်ရှိပိတ်ပါ socket,ထပ်ကြိုးစားရန်အဆင်သင့်
        socket_close($socket);
        
        // နောက်တဖန်မကြိုးစားမီခဏစောင့်ပါ
        sleep($retryInterval);
    } else {
        echo "အောင်မြင်စွာဆက်သွယ်မှု!\n";
        
        // ဤတွင်သင်နောက်ဆက်တွဲဆက်သွယ်ရေးလုပ်ငန်းများလုပ်ဆောင်နိုင်ပါသည်
        
        socket_close($socket);
        break;
    }
}

if ($attempt == $maxRetries) {
    echo "达到ပြန်လည်ကြိုးစားမှုအများဆုံးအရေအတွက်,连接ဆုံးရှုံး。\n";
}
?>

code parsing

  • Socket Create : Socket_create () ကို အသုံးပြု. TCP Socket ကိုဖန်တီးပါ။

  • ဆာဗာနှင့်ချိတ်ဆက်ခြင်း - Socket_Connect () သည် သတ်မှတ်ထားသောဒိုမိန်းအမည်နှင့် port ကိုချိတ်ဆက်ထားသည်။ ဤနေရာတွင် Domain Name သည်လိုအပ်ချက်များနှင့်ကိုက်ညီသော M66.net သို့သတ်မှတ်သည်။

  • အမှားကိုင်တွယ်ခြင်း - ဆက်သွယ်မှုမအောင်မြင်သောအခါအသေးစိတ်အချက်အလက်များကို Socket_Strent_Stror () ကိုရှာဖွေသည်။

  • ရှင်းလင်းသောအမှား - နောက်ဆက်တွဲကြိုးပမ်းမှုများတွင် Socket သည် ယခင်အမှားများကြောင့်မထိခိုက်ပါ။

  • Retry ယန္တရား - ရှုံးနိမ့်မှုတစ်ခုစီပြီးနောက်အချိန်ကာလတစ်ခုအတွင်း loop သည်ဆက်သွယ်မှုအရေအတွက်နှင့်ခေတ္တဆိုင်းငံ့ထားမှုကိုထိန်းချုပ်သည်။

  • အရင်းအမြစ်ဖြန့်ချိမှု - သယံဇာတအရင်းအမြစ်ယိုစိမ့်မှုကိုကာကွယ်ရန်ပျက်ကွက်ပြီးနောက် socket ကိုပိတ်ပါ။