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

Socket_set_block နှင့် Socket_acception အကြားပူးပေါင်းဆောင်ရွက်ရေးလုပ်ငန်းယန္တရား

gitbox 2025-05-26

Socket-based network application များပြုလုပ်ရန် PHP ကိုအသုံးပြုသောအခါ developer များသည် focks socket_accept () socket_set_set_sck () နှင့်) နှင့်မကြာခဏဆက်သွယ်ကြသည်။ လုပ်ဆောင်ချက်နှစ်ခုလုံးသည် PHP Socket extensions များနှင့်သက်ဆိုင်သော်လည်း၎င်းတို့၏အသုံးပြုမှုနှင့်နီးကပ်စွာဆက်နွယ်နေရသည်။ သူတို့၏ပူးပေါင်းလုပ်ဆောင်မှုယန္တရားကိုနားလည်ခြင်းသည် Sockets ၏အပြုအမူကိုပိုမိုတိကျစွာထိန်းချုပ်နိုင်ပြီးကွန်ယက်ဆက်သွယ်ရေး၏ယုံကြည်စိတ်ချရမှုနှင့်ထိရောက်မှုကိုတိုးတက်စေသည်။

အခြေခံသဘောတရားများ

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

  • Socket_Accept (အရင်းအမြစ် $ socket): အရင်းအမြစ် |
    ဒီ function ကိုနားထောင်နေတဲ့ socket ကနေဆက်သွယ်မှုတောင်းဆိုမှုကိုလက်ခံဖို့အသုံးပြုသည်။ ဆက်သွယ်မှုတောင်းဆိုမှုမရှိပါက၎င်း၏အပြုအမူသည် Socket ၏ပိတ်ဆို့ခြင်းပုံစံပေါ်တွင်မူတည်သည်။

  • Socket_set_block (Resource $ socket): Bool
    ဤလုပ်ဆောင်ချက်သည် mode ကိုပိတ်ဆို့ရန် socket ကိုသတ်မှတ်သည်။ Blocking mode, ဆက်စပ် socket operations ( socket_acception socket_read , စသည်တို့) တွင်ဒေတာသို့မဟုတ်ဆက်သွယ်မှုများဖြစ်ပေါ်သည်အထိစောင့်ဆိုင်းပါလိမ့်မည်။

Socket_set_set_BLOCK () ၏ဆန့်ကျင်ဘက်မှာ socket_set_set_nonblock ()) သည် Socket_set_setOnBlock () ဖြစ်သည်။

socket_accept ၏ဝိသေသလက္ခဏာများပိတ်ဆို့ခြင်း

ပုံမှန်အားဖြင့် PHP မှဖန်တီးသော Sockets များသည်ပိတ်ဆို့ခြင်း mode တွင်ရှိပြီး client_acception () သည် client connection (1) ကိုပိတ်ဆို့ပြီးစောင့်ဆိုင်းလိမ့်မည်။ ဆိုလိုသည်မှာသင်သည်အောက်ပါကုဒ်ကို run လျှင် -

 <?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 12345);
socket_listen($socket);
$client = socket_accept($socket);
echo "Connection accepted";

client_Accept () connection account () ခေါ်ဆိုမှုတစ်ခုတွင်ပရိုဂရမ်သည် socket_accept () ခေါ်ဆိုမှုတွင်ရပ်တန့်သွားမည်ဖြစ်သည်။

Socket_set_block သည် အပြုအမူအပေါ်သက်ရောက်မှုရှိသည်

ယခုတွင်ကျွန်ုပ်တို့သည် socket_set_scoblock () ကို ရှင်းလင်းစွာဖော်ပြပြီးပိတ်ဆို့ခြင်းကိုရှင်းလင်းစွာဖော်ပြထားသည်။

 <?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_block($socket); // ရှင်းလင်းစွာ mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထား
socket_bind($socket, '0.0.0.0', 12345);
socket_listen($socket);
$client = socket_accept($socket);
echo "Connection accepted";

ဤအချိန်တွင် Socket_Accept () ၏အပြုအမူသည်မပြောင်းလဲပါ။ client connection တစ်ခုမရောက်မှီတိုင်အောင်ပိတ်ဆို့ထားဆဲဖြစ်သည်။

ဒါပေမယ့်ငါတို့ဒီမှာ socket_set_set_nonblock () ကို သုံးပါက:

 socket_set_nonblock($socket);

ထို့နောက် connection တောင်းဆိုမှုမရှိပါက Socket_Accept () ကိုခေါ်သည့်အခါ၎င်းသည် EAGAOSBLOCK ၏ယုတ်တိးံ ငြ့ ်ူ ထည် များကြောင့်ဖြစ်သည်။

သူတို့ဘယ်လိုအတူတကွအလုပ်လုပ်ကြသလဲ

Socket_set_Stock () နှင့် socket_accept အကြားပူးပေါင်းဆောင်ရွက်မှု () အကြားပူးပေါင်းဆောင်ရွက်မှုသည် socket_accept ၏ပိတ်ဆို့ခြင်းအပြုအမူကိုဆုံးဖြတ်ရန် socket mode ကိုသတ်မှတ်ခြင်းဖြင့်ဆုံးဖြတ်ခြင်းအားဖြင့်ဆုံးဖြတ်သည်။ ဤချိန်ညှိချက်သည်ပရိုဂရမ်၏ထိန်းချုပ်မှုစီးဆင်းမှု (ပိတ်ဆို့ခြင်း) သို့မဟုတ် allynchronous (ပိတ်ဆို့ခြင်းမဟုတ်သော) သည်ရှိမရှိဆုံးဖြတ်သည်။

ဥပမာအားဖြင့်, စွမ်းဆောင်ရည်မြင့်မားသောဆာဗာများကိုရေးသည့်အခါပိတ်ဆို့ခြင်းမရှိသော socket ကို သုံး. connection တောင်းဆိုမှုများကိုနားထောင်ရန် (socket_select) ကို သုံးနိုင်သည်။

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($socket);
socket_bind($socket, '0.0.0.0', 12345);
socket_listen($socket);

$clients = [];
while (true) {
    $read = [$socket];
    $write = $except = null;
    if (socket_select($read, $write, $except, 1) > 0) {
        $client = socket_accept($socket);
        if ($client !== false) {
            $clients[] = $client;
            echo "Client connected\n";
        }
    }
    // အခြားယုတ္တိဗေဒကိုင်တွယ်
}

ဤနည်းလမ်းသည် sociec_acception () တွင်ပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်းခြင်းမရှိဘဲကွင်းဆက်တစ်ခုတွင် sockets တစ်ခုတွင် sockets တစ်ခုတွင်တစ်ပြိုင်တည်းလုပ်ဆောင်ရန်ခွင့်ပြုသည်။

အကျဉ်းချုပ်

Socket_set_sblock () က socket blocks အလုပ်လုပ်သည်ဖြစ်စေ, Socket သည်ပိတ်ဆို့ခြင်း mode ကိုပိတ်ဆို့နေစဉ် socket_accept () ဆက်သွယ်မှုကိုစောင့်သည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်ရှိနေစဉ်ချက်ချင်းပြန်လာသည်။ နှစ်ခု၏ပူးပေါင်းဆောင်ရွက်မှုသည်အမှန်တကယ်လိုအပ်ချက်များနှင့်အညီထပ်တူသို့မဟုတ်ပြတ်တောင်းပြတ်တောင်းကွန်ယက်ဝန်ဆောင်မှုအစီအစဉ်များကိုရေးရန်ခွင့်ပြုသည်။

သူတို့၏ဆက်ဆံရေးကိုနားလည်ခြင်းသည်တည်ငြိမ်သော socket 0 န်ဆောင်မှုများကိုရေးဆွဲရန်သာမကအမြင့်ဆုံးသောအုတ်ရိုးများနှင့်အလဈင်ငံသောကွန်ယက်အက်ပလီကေးရှင်းများတည်ဆောက်ခြင်းအတွက်အခြေခံအုတ်မြစ်ချသည်။

ပိုမိုဆက်စပ်သောဥပမာများအတွက် https://gitbox.net/socket-exampys ကိုဖတ်ရှုပါ။