လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်တွင် socket_set_set_block ၏အန္တရာယ်များနှင့်တုံ့ပြန်မှုများ

မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်တွင် socket_set_set_block ၏အန္တရာယ်များနှင့်တုံ့ပြန်မှုများ

gitbox 2025-05-26

1 ။ socket_set_sc.block နှင့်မြင့်မားသောတစ်ပြိုင်နက်တည်းအန္တရာယ်

Socket_set_Lock block mode ကိုပိတ်ထားသည်, IO စစ်ဆင်ရေး ( socket_read_read_read_read_write ) သည် လက်ရှိအခြေအနေကိုဖတ်ပြီးသည်အထိသို့မဟုတ်စာကိုအောင်မြင်သည်အထိလက်ရှိလုပ်ငန်းစဉ်သို့မဟုတ်ချည်ကိုပိတ်ဆို့လိမ့်မည်။ ၎င်းသည်တစ် ဦး တည်းသောချည်နှောင်ခြင်းသို့မဟုတ်အနိမ့်တစ်ပြိုင်နက်တည်းဖြစ်စေ,

  1. ပိတ်ဆို့ခြင်းသည်အရင်းအမြစ်သိမ်းရန် <br> <br> ပိတ်ဆို့ခြင်း mode သည်ပရိုဂရမ်ကိုလက်မခံနိုင်သောတောင်းဆိုမှုကိုလက်ကိုင်လုပ်ရန်မတတ်နိုင်သောတောင်းဆိုမှုကိုပြုလုပ်နိုင်သည်။ အထူးသဖြင့်ကွန်ယက်သည်နှောင့်နှေးနေသည့်အခါ,

  2. လျော့နည်းသွားသောတုံ့ပြန်မှုကိုတိုးမြှင့်ခြင်းက latency <br> ဆက်သွယ်မှုများစွာကိုပိတ်ဆို့ထားသည့်အခါဆာဗာသည်အချိန်မီဆက်သွယ်မှုတောင်းဆိုမှုများအသစ်များကိုအချိန်မီမလုပ်ဆောင်နိုင်ပါ။

  3. Threads / ဖြစ်စဉ်များအရေအတွက်ကန့်သတ်ချက်ရှိသည် ဆာဗာ၏တစ်ပြိုင်နက်တည်းစွမ်းရည်ကိုရရှိနိုင်သည့်ချည်သို့မဟုတ်လုပ်ငန်းစဉ်အရေအတွက်ကိုကန့်သတ်ထားသည်။ စစ်ဆင်ရေးများကိုပိတ်ဆို့ခြင်းသည်ဤချည်များသို့မဟုတ်လုပ်ငန်းစဉ်များကိုစောင့်ဆိုင်းနေသည့်အခြေအနေတွင်ပြုလုပ်သည်။

  4. Deadlock အန္တရာယ် <br> အကယ်. နှစ် ဦး နှစ်ဖက်အပြန်အလှန်သီးသန့်အရင်းအမြစ်များအတွက်ယှဉ်ပြိုင်မှုသည်ပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်းနေစဉ်အတွင်းပါဝင်ပတ်သက်ပါက,


2 ။ မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်ပတ်ဝန်းကျင်မှာဘုံကိုင်တွယ်ဖြေရှင်းနိုင်မဟာဗျူဟာ

1 ။ ပိတ်ဆို့ခြင်း non-blocking mode_set_set_set_scblock ကို သုံးပါ

Socket_set_setonBlock ကို ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket သို့ socket သို့ပြောင်းရန် IO စစ်ဆင်ရေးသည်လက်ရှိလုပ်ငန်းစဉ်ကိုပိတ်ဆို့လိမ့်မည်မဟုတ်ပါ, သို့သော်ချက်ချင်းပြန်လာလိမ့်မည်မဟုတ်ပါ။ PHP တိုးချဲ့မှုများ၌ (ထိုကဲ့သို့သော ရွေးချယ်ခြင်း , စစ်တမ်းကောက်ယူခြင်း သို့မဟုတ် လစ်ဘရယ် ) များ (PHP တိုးချဲ့ခြင်းတို့ဖြင့်ရွေးချယ်ခြင်း, စစ်တမ်းကောက်ယူခြင်း,

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

socket_set_nonblock($socket);

while (true) {
    $client = @socket_accept($socket);
    if ($client === false) {
        // ဆက်သွယ်မှုအသစ်မရှိပါ,ကွင်းဆက်ကိုဆက်သွားပါ
        usleep(10000); // ချိုးပါ,လေှျာ့ပေါ့CPUနေထိုင်ခြင်း
        continue;
    }

    // client ကိုရန် socket ထို့အပြင် non-blocking ကိုထားကြ၏
    socket_set_nonblock($client);

    // ဒေတာဖတ်နေသို့မဟုတ်ရေးသားတဲ့အခါ,ပေါင်းစပ်ထားသော socket_select နားထောင်ခြင်းအခြေအနေ
}
?>

2 ။ multiplexing အောင်မြင်ရန် Socket_select ကို သုံးပါ

Socket_select သည် Socket မျိုးစုံ၏ဖတ်ရန်နှင့်ရေးရန်အဆင့်အတန်းကိုနားထောင်ပြီးရေးရန်အဆင့်အတန်းကိုပိတ်ဆို့ခြင်း, ဆက်သွယ်မှုတစ်ခုတည်းကိုပိတ်ဆို့ခြင်းနှင့်ဆက်သွယ်မှုမျိုးစုံလုပ်ဆောင်ရန်ဆာဗာ၏စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။

 <?php
$read = [$socket];
$write = null;
$except = null;

if (socket_select($read, $write, $except, 0, 200000)) {
    foreach ($read as $readSocket) {
        if ($readSocket === $socket) {
            $client = socket_accept($socket);
            socket_set_nonblock($client);
            // နားထောင်ရန်
        } else {
            $data = socket_read($readSocket, 1024);
            if ($data === false || $data === '') {
                socket_close($readSocket);
                // စာရင်းစာရင်းမှဖယ်ရှားပါ
            } else {
                // အချက်အလက်များကိုထုတ်ယူခြင်း
            }
        }
    }
}
?>

3 ။ asynchronous IO သို့မဟုတ်ဖြစ်ရပ်-driven-driven မူဘောင်ကိုသုံးပါ

SWOOLE နှင့် Refriphp ကဲ့သို့သောပြတ်တောင်းပြတ်တောင်းမူဘောင်များအကူအညီဖြင့်ပိတ်ဆို့ခြင်းကိုလုံးဝရှောင်ရှားနိုင်ပြီးတစ်ပြိုင်နက်တည်းဆက်သွယ်မှုအမြောက်အများကိုအလျင်အမြန်တိုးတက်လာခြင်း,

 <?php
use Swoole\Coroutine\Http\Server;

$server = new Server("0.0.0.0", 9501);

$server->handle('/', function ($request, $response) {
    $response->end("Hello, Swoole!");
});

$server->start();
?>

4 ။ ချည်သို့မဟုတ် process နည်းပညာ

အဓိကချည်နှောင်ခြင်းကိုရှောင်ရှားရန်လွတ်လပ်သောလုပ်သားချည်များသို့မဟုတ်လုပ်ငန်းစဉ်များသို့ 0 င်ရောက်ခြင်းကိုပိတ်ထားရန် Multi-process သို့မဟုတ် Multi-Threading ကိုသင့်တသင့်တော်အောင်လုပ်ပါ။


3 ။ အကျဉ်းချုပ်

စွန့်စားမှုအချက်များ တုံ့ပြန်မှုအစီအမံ
ပိတ်ဆို့ခြင်းသည်လုပ်ငန်းစဉ်ကိုအရင်းအမြစ်အသုံးပြုမှုကိုစောင့်ဆိုင်းရန်ဖြစ်သည် ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသုံးပါသို့မဟုတ်ဖြစ်ရပ်မောင်းသူကိုသုံးပါ
တုန့်ပြန်ခုံတန်းရှည်နှင့် throughput drop ဆက်သွယ်မှုမျိုးစုံကိုနားထောင်ရန် Socket_select ကို သုံးပါ
Thread Pool မော စိတ်ဖိစီးမှုကိုဝေမျှရန် Multi-Threaded / Multi-process pools များကိုသုံးပါ
အကျပ်အတည်းအန္တရာယ် အပြန်အလှန်သီးသန့်ရှင်းရှင်းလင်းလင်းမရှင်းလင်းစေရန်ကျိုးကြောင်းဆီလျော်သယံဇာတအရင်းအမြစ်လက်လှမ်းမီမှုမဟာဗျူဟာကိုဒီဇိုင်းဆွဲပါ

မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်တွင်ပိတ်ဆို့ခြင်း sockets များကိုပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်နှင့် PHP အစီအစဉ်များကိုထိရောက်စွာတည်ငြိမ်သောလည်ပတ်မှုကိုသေချာစေရန်ပိတ်ဆို့ခြင်း,