လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_set_set_block တွင် Socket_set_block တွင်မျှဝေပါ

Socket_set_set_block တွင် Socket_set_block တွင်မျှဝေပါ

gitbox 2025-05-29

Two-Time Time Componnication, websound နည်းပညာကိုအွန်လိုင်းစကားပြောခြင်း, Real-time push, game interacation နှင့်အခြားအခြေအနေများတွင်ကျယ်ပြန့်စွာအသုံးပြုသည်။ PHP ကို ​​အသုံးပြု. WebSound 0 န်ဆောင်မှုများကိုတည်ဆောက်ရာတွင်ကွန်ယက်ဆက်သွယ်မှု၏စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုသည်အဓိကကျသည်။ PHP Socket ပရိုဂရမ်တွင်အရေးကြီးသောကိရိယာတစ်ခုအနေဖြင့် Socket_set_Set_Block function သည် socket ၏ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သောနေရာများကိုထိရောက်စွာထိန်းချုပ်နိုင်ပြီးဝက်ဘ်ဆိုက်များ 0 န်ဆောင်မှုများအပေါ်တုံ့ပြန်မှုမြန်ဆန်မှုနှင့်အရင်းအမြစ်အသုံးချမှုကိုပိုမိုကောင်းမွန်စေရန်အထောက်အကူပြုနိုင်သည်။

ဤဆောင်းပါးသည်လက်တွေ့ကျသောစီမံကိန်းအတွေ့အကြုံကိုအတိမ်အချင်း socket_set_block function ကိုအတိမ်အနက်ဖြင့်ရှင်းပြရန်နှင့်လက်တွေ့ကျသောကျွမ်းကျင်မှုများကိုဝေမျှရန်အတိမ်အနက်ဖြင့်ရှင်းပြပါလိမ့်မည်။


1 ။ Socket_set_sblock ဆိုတာဘာလဲ။

Socket_set_BLOCK သည် PHP မှပေးသော function တစ်ခုဖြစ်ပြီး Socket သည်ပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်းပုံစံရှိလား။ ပိတ်ဆို့ခြင်း mode မှာ blocking mode မှာ socket operations (ဥပမာ, စာရေးခြင်းကဲ့သို့သော) သည်မထွက်ခွာမီလုပ်ဆောင်ရန်စောင့်ဆိုင်းနေလိမ့်မည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်စစ်ဆင်ရေးသည်ချက်ချင်းပြန်လာလိမ့်မည်။

 <?php
// တည်ဆောက်သည် socket ပိတ်ဆို့ mode ကို၌တည်၏
socket_set_block($socket);

// တည်ဆောက်သည် socket Non-blocking mode မှာ
socket_set_nonblock($socket);
?>

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


2 ။ vs. ပိတ်ဆို့ခြင်း websocket ဝန်ဆောင်မှုအတွက်ပိတ်ဆို့ခြင်း

  • mode ကိုပိတ်ဆို့ခြင်း <br> <br> ရိုးရှင်းသောအခြေအနေများအတွက်သင့်တော်သည်မှာ code စီးဆင်းမှုသည်အလိုလိုသိသော်လည်း,

  • Non-blocking mode <br> <br> ဆာဗာကိုချက်ချင်းပြန်ပို့ရန်ခွင့်ပြုသည်။ သို့သော်ပရိုဂရမ်းမင်းရှုပ်ထွေး မှု တိုးပွားလာသည်။


3 ။ ထိရောက်စွာ Socket_set_Stock နှင့်ဆက်သွယ်မှုများကိုစီမံပါ

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

  • Connection increase phase : connection handshake ကိုယုံကြည်စိတ်ချစွာပြီးစီးရန်သေချာစေရန် socket ကိုပိတ်ထားရန် socket ထားပါ။

  • ဒေတာထုတ်လွှင့်မှုအဆင့် - ပိတ်ဆို့ခြင်းမဟုတ်သောနေရာများသို့ပြောင်းပါ။ Socket_select ကိုဖွင့်ပြီးပိတ်ဆို့ခြင်းကြောင့်ဖြစ်ပေါ်လာသောစွမ်းဆောင်ရည်မြှင့်တင်ခြင်းကိုရှောင်ရှားရန် Socket_Select ကိုပေါင်းစပ်ပါ။

နမူနာကုဒ်အတိုအထွာ:

 <?php
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($serverSocket, '0.0.0.0', 9501);
socket_listen($serverSocket);

socket_set_block($serverSocket);

while (true) {
    $clientSocket = socket_accept($serverSocket);
    if ($clientSocket !== false) {
        // လက်ဆွဲနှုတ်ဆက်ခြင်းကိုဖြည့်ပါ,တည်ဆောက်သည်非阻塞模式,ပြတ်တောင်းပြတ်တောင်းအပြောင်းအလဲနဲ့စတင်ပါ
        socket_set_nonblock($clientSocket);

        // သေတမ်းစာ $clientSocket ဖောက်သည်စာရင်းထဲသို့ထည့်ပါ,နောက်ပိုင်းတွင်အသုံးပြုပါ socket_select ကိုင်တွယ်ဖြေရှင်းသည်
        $clients[] = $clientSocket;
    }

    // အသုံးပြု socket_select ဖောက်သည်မျိုးစုံကိုနားထောင်ပါ,ပိတ်ဆို့မှုကိုရှောင်ကြဉ်ပါ
    $read = $clients;
    $write = null;
    $except = null;
    if (socket_select($read, $write, $except, 0, 200000) > 0) {
        foreach ($read as $readSocket) {
            $data = socket_read($readSocket, 2048);
            if ($data === false || $data === '') {
                // ဆက်သွယ်မှုပိတ်ထားသောသို့မဟုတ်အမှား,အရင်းအမြစ်များကိုသန့်ရှင်းရေး
                $index = array_search($readSocket, $clients);
                unset($clients[$index]);
                socket_close($readSocket);
            } else {
                // ကိုင်တွယ်ဖြေရှင်းသည် WebSocket ဒေတာဘောင်
                // ...
            }
        }
    }
}
?>

4 ။ ဘုံအန္တရာယ်များနှင့် optimization အကြံပြုချက်များ

  • ရေရှည်ပိတ်ဆို့ခြင်းကိုရှောင်ကြဉ်ပါ အကယ်. client သည်မတုံ့ပြန်ပါကဖြစ်စဉ်ကိုဆွဲထားနိုင်သည်။ အချိန်ကုန်ထိန်းချုပ်မှုကိုထိန်းချုပ်ရန်သို့မဟုတ်ပိတ်ဆို့ခြင်းကိုအတတ်နိုင်ဆုံးအသုံးချရန်အကြံပြုသည်။

  • Socket_select ကိုကျိုးကြောင်းဆီလျော်စွာအသုံးပြုခြင်း - ပိတ်ဆို့ခြင်းမဟုတ်သော mode နှင့်ပေါင်းစပ်။ ဆာဗာသည်တစ်ချိန်တည်းတွင်ဆက်သွယ်မှုများစွာကိုကိုင်တွယ်နိုင်ပြီး throughpput ကိုတိုးတက်စေနိုင်သည်။

  • အမှားကိုင်တွယ်ပုံကိုအသေးစိတ်ဖော်ပြသင့်သည် - ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင် Socket_read တွင် EAGAY ကဲ့သို့သောအမှားကုဒ်ကိုပြန်ပို့နိုင်သည်။

  • မှတ်ဉာဏ်စီမံခန့်ခွဲမှု - မှတ်ဉာဏ်ယိုစိမ့်မှုကိုကာကွယ်ရန် disconnected socket ကိုပိတ်ပါ။


5 ။ ရည်ညွှန်းအရင်းအမြစ်များ