လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP တွင် Socket_set_Stocking function ကို အသုံးပြု. တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုမည်သို့ထိရောက်စွာကိုင်တွယ်ရမည်နည်း။

PHP တွင် Socket_set_Stocking function ကို အသုံးပြု. တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုမည်သို့ထိရောက်စွာကိုင်တွယ်ရမည်နည်း။

gitbox 2025-06-09

မြင့်မားသောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုလုပ်ဆောင်သည့်အခါ PHP သည်ဆာဗာဘေးထွက် scripting language တစ်ခုအနေဖြင့်, အထူးသဖြင့် i / O စစ်ဆင်ရေးများ, စာဖတ်ခြင်း, စာဖတ်ခြင်း, စာဖတ်ခြင်း, Socket_set_scoChing function သည် PHP တွင်အသုံးဝင်သောကိရိယာတစ်ခုဖြစ်ပြီး developer များသည် sockets ၏ပိတ်ဆို့ခြင်းအပြုအမူကိုထိရောက်စွာထိန်းချုပ်နိုင်အောင်ကူညီနိုင်အောင်ကူညီနိုင်ပြီးတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုတိုးတက်စေသည်။ ဤဆောင်းပါးသည် PHP ၏တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုကိုအကောင်းဆုံးလုပ်ရန် socket_set_blocking function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။

Socket_set_sclocking function ကိုခြုံငုံသုံးသပ်ချက်

Socket_set_blocking သည် Socket သည်ပိတ်ဆို့ခြင်းကိုထိန်းချုပ်သည်ကိုထိန်းချုပ်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ပုံမှန်အားဖြင့် Socket များပိတ်ခြင်းသည်ပိတ်ဆို့ခြင်း mode တွင် run သည်, ၎င်းသည် socket operty (စာဖတ်ခြင်းသို့မဟုတ်အချက်အလက်များ) တွင်အချက်အလက်များမရှိပါကဤပရိုဂရမ်သည်အချက်အလက်များကိုမရမှီတိုင်အောင်စောင့်ဆိုင်းနေစေသည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket သို့ socket လုပ်ရန်ပရိုဂရမ်သည်ကျွန်ုပ် / o စစ်ဆင်ရေးပြီးစီးခြင်းကိုစောင့်ဆိုင်းမည့်အစားအခြားအလုပ်များကိုဆက်လက်လုပ်ဆောင်နိုင်သည်။

function ကိုအဓိပ္ပါယ်:

 bool socket_set_blocking ( resource $socket , bool $blocking )
  • $ socket : သတ်မှတ်ထားရန်လိုအပ်သည့် socket အရင်းအမြစ်။

  • $ ပိတ်ဆို့ခြင်း - အကယ်. မှန်ကန် ပါက socket ကိုပိတ်ဆို့ရန် mode ကိုသတ်မှတ်ရန်, အကယ်. မှားယွင်းသော် လျှင် socket ကိုပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ပါ။

Concurrency စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန် Socket_set_Set_Blocking ကိုအသုံးပြုနည်း

ရိုးရာပိတ်ဆို့ခြင်းပုံစံများသည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုကိုင်တွယ်ရာတွင်စနစ်စွမ်းဆောင်ရည်ပိတ်ဆို့မှုများကိုဖြစ်ပေါ်စေနိုင်သည်။ socket ကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket သို့သတ်မှတ်ခြင်းဖြင့် PHP script သည် socket လည်ပတ်ရန်စောင့်နေစဉ်အခြားတောင်းဆိုမှုများကိုဆက်လက်လုပ်ဆောင်နိုင်သည်။ Socket_set_sblocking မှတဆင့်ထိရောက်သောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုကိုရယူရန်မည်သို့ပြုလုပ်ရမည်နည်း။

1 ။ အခြေခံကုဒ်များဥပမာ

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

 <?php
// ဖန်တီးTCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

// ချည်နေှာင်socket
socket_bind($socket, '127.0.0.1', 8080);

// စောင့်ကြည့်လေ့လာရေးစတင်ပါ
socket_listen($socket);

// Non-blocking mode ကိုသတ်မှတ်ပါ
socket_set_blocking($socket, false);

while (true) {
    // client connection များကိုလက်ခံရရှိသည်
    $client = socket_accept($socket);

    // ဆက်သွယ်မှုမရှိလျှင်အခြားစစ်ဆင်ရေးများကိုဆက်လက်လုပ်ဆောင်ပါ
    if ($client === false) {
        // ဥပမာအားဖြင့်အခြားအလုပ်များကိုစစ်ဆေးပါသို့မဟုတ် logging operations များကိုပြုလုပ်ပါ
        echo "ဖောက်သည်ဆက်သွယ်မှုမရှိပါ,အခြားအလုပ်များအပေါ်ဆက်လက်အလုပ်လုပ်ဆက်လက်...\n";
        continue;
    }

    // client ကိုပိတ်ဆို့ခြင်းမှ client ကိုသတ်မှတ်ပါ
    socket_set_blocking($client, false);

    // client data ကိုဖတ်ပါ
    $input = socket_read($client, 1024);

    if ($input) {
        echo "client ကိုဒေတာကိုလက်ခံရရှိခဲ့သည်: $input\n";
        // တောင်းဆိုမှုကိုနှင့်တုံ့ပြန်ပါ
        socket_write($client, "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello, Client!");
    }

    // ဆက်သွယ်မှုကိုပိတ်ပါ
    socket_close($client);
}

socket_close($socket);
?>

2 ။ ပိတ်ဆို့ခြင်းမဟုတ်သော modes ကိုနားလည်ပါ

အထက်ပါကုဒ်တွင် socket_set_sclocking ($ socket, false) မှ socket_set_blocking ($ Socket, False) သို့ socket_sc.Cy ကို သတ်မှတ်ရန်ဆိုထားသည် ၎င်းသည် program_acception တွင်မနေဘဲ client connection မပါဘဲအခြားအလုပ်များကိုဆက်လက်လုပ်ဆောင်ရန်ခွင့်ပြုသည်။

အလားတူစွာ client connection တစ်ခုချင်းစီကိုကိုင်တွယ်သောအခါ client socket ကိုပိတ်ထားသော mode သို့ 0 င်ရောက်ခြင်းကိုပြုလုပ်ရန်,

3 ။ တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုထိရောက်စွာလုပ်ဆောင်ပါ

တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပိတ်ဆို့ခြင်း socket operations များ, socket_select သို့မဟုတ် multi-thread / multi-thread / multi-thread method များကိုတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုပိုမိုထိရောက်စွာလုပ်ဆောင်ရန်အသုံးပြုနိုင်သည်။ Socket_select သည် socket အရင်းအမြစ်များကိုစောင့်ကြည့်လေ့လာနိုင်သည့် Socket Relections မျိုးစုံကိုစောင့်ကြည့်လေ့လာနိုင်သည့်အလွန်အသုံးဝင်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။

ဥပမာ Socketetets မျိုးစုံကိုကိုင်တွယ်ရန် Socket_select ကိုသုံးပါ

 <?php
// ဖန်တီး主socket
$masterSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($masterSocket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($masterSocket, '127.0.0.1', 8080);
socket_listen($masterSocket);

// Non-blocking ကိုသတ်မှတ်
socket_set_blocking($masterSocket, false);

$clients = array($masterSocket);

while (true) {
    // အသုံးပြုsocket_selectစောင့်ကြည့်လေ့လာခြင်းလုပ်ဆောင်ပါ
    $read = $clients;
    $write = null;
    $except = null;

    // စောင့်ရေှာက်socket
    if (socket_select($read, $write, $except, null) > 0) {
        // ဒေတာအားလုံးမှတဆင့်ကြားမှာsocket
        foreach ($read as $socket) {
            if ($socket === $masterSocket) {
                // ဆက်သွယ်မှုအသစ်များကိုလက်ခံပါ
                $client = socket_accept($masterSocket);
                socket_set_blocking($client, false);
                $clients[] = $client;
            } else {
                // client data ကိုဖတ်ပါ
                $input = socket_read($socket, 1024);
                if ($input === false) {
                    // ခဲှခြား
                    socket_close($socket);
                    $clients = array_diff($clients, array($socket));
                } else {
                    echo "ဒေတာကိုလက်ခံရရှိခဲ့သည်: $input\n";
                    socket_write($socket, "Hello, Client!");
                }
            }
        }
    }
}

socket_close($masterSocket);
?>

ဤဥပမာတွင် Socket_select function ကိုတစ်ပြိုင်နက်တည်း mutces များကိုစောင့်ကြည့်ရန် socket_select function ကိုအသုံးပြုသည်။ Socket ကိုရရှိနိုင်သည့်အခါပရိုဂရမ်သည်ဒေတာများကိုဖတ်ပြီးလုပ်ဆောင်သည်။ ဤနည်းအားဖြင့်ဆာဗာသည်တစ်ပြိုင်နက်တည်းကတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုတစ်ချိန်တည်းတွင်တောင်းဆိုမှုတစ်ခုကြောင့်အခြားတောင်းဆိုမှုများကိုပိတ်ဆို့ခြင်းမပြုဘဲတစ်ချိန်တည်းတွင်တစ်ချိန်တည်းတွင်လုပ်ဆောင်နိုင်သည်။

အကျဉ်းချုပ်

ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket လုပ်ရန် socket_set_sclocking function ကိုအသုံးပြုခြင်းသည် PHP တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုအပြောင်းအလဲအတွက်ပြုပြင်ရန်အတွက်အရေးကြီးသောနည်းလမ်းတစ်ခုဖြစ်သည်။ blocking mode ကိုပြင်ဆင်ခြင်းနှင့် Socket_select လုပ်ဆောင်ချက်များကို အသုံးပြု. developer များက PHP တွင် PHP တွင်စွမ်းဆောင်ရည်မြင့်မားသောတောင်းဆိုမှုကိုပြုလုပ်နိုင်သည်။ I / O စစ်ဆင်ရေးများကိုအကောင်းဆုံးသောဆက်သွယ်မှုအမြောက်အများကိုကိုင်တွယ်ရန်လိုအပ်သော application များအတွက်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်အတွက်သော့ချက်ဖြစ်သည်။