လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_Close_ERRORR () မှတဆင့်ကြာရှည်စွာဆက်သွယ်မှုများကိုဆက်တိုက်လိုင်းများဆက်တိုက်မည်သို့ထားရမည်နည်း။

Socket_Close_ERRORR () မှတဆင့်ကြာရှည်စွာဆက်သွယ်မှုများကိုဆက်တိုက်လိုင်းများဆက်တိုက်မည်သို့ထားရမည်နည်း။

M66 2025-06-12

PHP ကို ​​အသုံးပြု. Socket-based server သို့မဟုတ် client programs များကိုတည်ဆောက်သည့်အခါဆက်နွယ်သောဆက်သွယ်မှုသည်အလွန်အသုံးများသောလိုအပ်ချက်ဖြစ်သည်။ အထူးသဖြင့်လက်ငင်းစာတိုပေးပို့ရေး, အွန်လိုင်းဂိမ်းဆာဗာများသို့မဟုတ်ဒေတာတွန်းအားပေးခြင်းကဲ့သို့သောဖြစ်ရပ်များတွင်အချိန်ကြာမြင့်စွာချိတ်ဆက်ထားပြီးအဆက်မပြတ်စီတန်းထားသည့် societing ကိုဆက်ထိန်းထားနိုင်ပြီးအမြဲတမ်းသက်ရောက်မှုရှိသည်။

ဤအခြေအနေတွင် Socket_Close_Error () ၏ဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည် connection ကိုတည်ငြိမ်စေရန်သော့ချက်ဖြစ်သည်။ ဤဆောင်းပါးသည်၎င်းကိုမည်သို့အသုံးပြုသည်ကိုပိုမိုနက်ရှိုင်းစွာလေ့လာသုံးသပ်ပြီးအမှားများကြောင့်ဆက်သွယ်မှုပြတ်တောက်ခြင်းများကိုမည်သို့ရှောင်ရှားနိုင်ကြောင်းသရုပ်ဖော်ရန်လက်တွေ့ကျသောဥပမာအချို့ကိုပေါင်းစပ်ပါလိမ့်မည်။


1 ။ Socket_Clear_Error () ကဘာလဲ

Socket_Close_Error () သည် php မှပေးသော socket function ကိုသတ်မှတ်ထားသော socket နှင့်ဆက်စပ်သောအမှားအချက်အလက်များကိုရှင်းလင်းရန် PHP မှပေးသော socket opertion function ဖြစ်သည်။ function ကိုလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 void socket_clear_error ([ resource $socket ] )

၎င်းကိုသတ်သတ်မှတ်မှတ် socket တစ်ခုသို့မဟုတ်တစ်ကမ္ဘာလုံးတွင်အသုံးပြုနိုင်သည်။ socket operty တွင်အမှားတစ်ခုဖြစ်သောအခါအမှားအယွင်းကိုသိမ်းဆည်းထားလိမ့်မည်။ အကယ်. ဤအမှားများကိုအချိန်တိုအတွင်းမရှင်းလင်းပါကနောက်တစ်ခါ Socket function ဟုခေါ်သည့်အခါအပြုအမူကိုအကျိုးသက်ရောက်စေပြီးဆက်သွယ်မှုကိုအဆက်ပြတ်စေနိုင်သည်။


2 ။ အဘယ်ကြောင့်ဝါယာကြိုးအဆက်ပြတ်သနည်း

ဆက်နွယ်မှုများပြုလုပ်သောအခါအဆက်မပြတ်ဆက်သွယ်မှုအတွက်အကြောင်းပြချက်များစွာရှိသည်။

  • Network Jitter;

  • client သည်ဆက်သွယ်မှုကိုပိတ်လိုက်သည်။

  • ဆာဗာအတွင်းပိုင်းအပြောင်းအလဲနဲ့အမှားကိုဖမ်းမိခြင်းမရှိပါ။

  • အမှား stacking မရှင်းလင်းပါ။

နောက်ဆုံးတစ်ခုကကျွန်ုပ်တို့၏ဆောင်းပါး၏အဓိကအချက်ဖြစ်သည်။ အကယ်. ၎င်းသည် socket_clear_error ( ) နှင့် socket_read ()) မှမရှင်းလင်းပါကအနည်းငယ်သောဆိုးဝါးသောအမှားတစ်ခုဖြစ်ပါကပင် "အမှားအယွင်း" ကိုရှာဖွေတွေ့ရှိခြင်းကြောင့်နောက်တစ်ခါပုံမှန်မဟုတ်သောသို့မဟုတ်ကြားဖြတ်ခြင်းကိုဖြစ်ပေါ်စေနိုင်သည်။


3 ။ ဥပမာအားဖြင့်ခွဲခြမ်းစိတ်ဖြာခြင်း - ချိတ်ဆက်ထားသည့်အတွက်သိကောင်းစရာများ

ဤတွင် 0 န်ဆောင်မှုခံယူသူတောင်းဆိုမှုများကိုကိုင်တွယ်သောပုံမှန် php socke side code snippet တစ်ခုဖြစ်ပြီးရှည်လျားသောဆက်သွယ်မှုများကိုထိန်းသိမ်းထားသည်။

 $host = '0.0.0.0';
$port = 9000;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

$clients = [];

while (true) {
    $read = $clients;
    $read[] = $socket;

    $write = $except = null;
    socket_select($read, $write, $except, 0, 200000); // ပိတ်ဆို့ခြင်းမဟုတ်သော

    if (in_array($socket, $read)) {
        $client = socket_accept($socket);
        $clients[] = $client;
        socket_clear_error($client); // ဆက်သွယ်မှုအသစ်၏အမှားအယွင်းကိုရှင်းလင်းပါ
    }

    foreach ($clients as $key => $client) {
        $data = @socket_read($client, 1024, PHP_NORMAL_READ);
        if ($data === false) {
            $error = socket_last_error($client);
            if ($error !== 0) {
                echo "Socket error: " . socket_strerror($error) . "\n";
                socket_clear_error($client);
            }
            continue;
        }

        $data = trim($data);
        if ($data == 'quit') {
            socket_close($client);
            unset($clients[$key]);
            continue;
        }

        $response = "Server received: $data\n";
        @socket_write($client, $response, strlen($response));
        socket_clear_error($client); // ဆက်သွယ်ရေးတစ်ခုချင်းစီပြီးနောက်ရှင်းလင်းသောအမှားများ
    }
}

ဤကုဒ်သည်အဓိကနည်းဗျူဟာများစွာကိုဖော်ပြသည်။

  • client client connection တစ်ခုကိုလက်ခံရရှိသည့်အခါတိုင်း socket_clear_error () ကိုချက်ချင်းရှင်းလင်းပါ။

  • တစ်ခုချင်းစီကိုဖတ်ရှုခြင်းသို့မဟုတ်ရေးရန်ပြုလုပ်ပြီးနောက်ဖြစ်နိုင်ချေရှိသောအမှားများကိုရှင်းလင်းပါ။

  • ဆိုးဝါးသောအမှားအယွင်းများ (ဥပမာယာယီကွန်ယက်ပြတ်တောက်ခြင်းများ) အရချက်ချင်းအဆက်ဖြတ်ခြင်းမပြုပါနှင့်,


4 ။ ဆက်သွယ်မှုပြုပြင်ထိန်းသိမ်းမှုကိုနှလုံးခုန်ခြင်းယန္တရားနှင့်အတူပိုကောင်းအောင်လုပ်ပါ

ရှင်းလင်းခြင်းအမှားများအပြင် "HeartBeat Package" ကိုဆင်ခြင်ခြင်းသည်ဆက်စပ်မှုကိုအဆက်မပြတ်ထိန်းသိမ်းရန်သော့ချက်ဖြစ်သည်။ နှလုံးခုန်ခြင်းယန္တရားသည် client သည် client ကို fixed အချိန်ရှိဆာဗာသို့ပေါ့ပါးသောဒေတာ packet ကိုပေးပို့ရန်ခွင့်ပြုသည်။ အချိန်ကာလတစ်ခုအကြာတွင်နှလုံးခုန်နှုန်းကိုမရရှိပါကဆက်သွယ်မှုကိုအလိုအလျောက်ပိတ်နိုင်သည်။

 // HeartBeat တုံ့ပြန်မှုဥပမာ၏ရိုးရှင်းသောဗားရှင်း
if ($data == 'ping') {
    @socket_write($client, "pong\n");
    socket_clear_error($client);
}

၎င်းသည် "တကယ့်ကျိုးပဲ့သောလိုင်း" နှင့် Socket_Close_Error () နှင့် "Misjudgment Line" တို့အကြားခြားနားချက်ကိုပိုမိုသိရှိနိုင်သည်။


5 ။ ဖုတ်ကောင်ဆက်သွယ်မှုများနှင့်ခြွင်းချက်ပြည်နယ်များကိုကိုင်တွယ်

အမှားကိုအချိန်အတော်ကြာရှင်းလင်းရန်ပျက်ကွက်ခြင်းကြောင့် "ဖုတ်ကောင်ဆက်သွယ်မှု" ဟုလည်းခေါ်ယူခြင်းသည်, ဤတွင်ဖောက်သည်အားလုံး၏အခြေအနေကိုပုံမှန်စစ်ဆေးရန်နည်းလမ်းဖြစ်သည်။