PHP တွင် Socket_set_Set_Blocking function ကို Socket Resourt ၏ပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ရန်အသုံးပြုသည်။
Blocking Mode: Socket-Related function များကိုခေါ်ဆိုသည့်အခါစစ်ဆင်ရေးပြီးစီးရန်စောင့်ဆိုင်းပါ။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode: socket-related လုပ်ဆောင်ချက်များကိုခေါ်ဆိုသည့်အခါချက်ချင်းပြန်လာပြီးစစ်ဆင်ရေးပြီးစီးရန်မစောင့်ပါ။
ပုံမှန်အားဖြင့် Socket သည်ပိတ်ဆို့နေသည်။ Blocking mode သည်ရိုးရှင်းသောထပ်တူပြုခြင်းအခြေအနေများအတွက်သင့်တော်သော်လည်းစွမ်းဆောင်ရည်မြင့်မားသောဆာဗာများအတွက်ပိုမိုအသေးစိတ်ထိန်းချုပ်မှုစီးဆင်းမှုယန္တရားလိုအပ်သည်။
bool socket_set_blocking ( resource $socket , bool $mode )
$ socket : socket အရင်းအမြစ်။
$ Mode : True ဆိုသည်မှာပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်း, မှားယွင်းသော နည်းလမ်းများသည်ပိတ်ဆို့ခြင်းမဟုတ်ကြောင်းဆိုလိုသည်။
ထိန်းချုပ်မှုစီးဆင်းမှုသည်မက်ဆေ့ခ်ျများလျင်မြန်စွာပေးပို့ခြင်းမှကာကွယ်ရန်မက်ဆေ့ခ်ျများကိုပေးပို့ခြင်းနှင့်လက်ခံခြင်းကိုကိုင်တွယ်ဖြေရှင်းခြင်း, ကွန်ယက်ပိတ်ဆို့ခြင်း, ထိန်းချုပ်မှုစီးဆင်းမှုရှိသောဒီဇိုင်းများသည်အောင်မြင်နိုင်သည်။
တန်းစီစာကြောင်းကြားခံ, တစ်ဆင့်ပြီးတစ်ဆင့်လိုက်ပို့ခြင်း။
ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သော mode များအကြား dynamically switch ။
အချိန်ကုန်ကိုင်တွယ်ခြင်းနှင့်အမှားပြန်လည်ယန္တရား။
ဆာဗာနှင့် client နှစ်ခုလုံးသည်ပေးပို့ခြင်းနှင့်လက်ခံခြင်းကိုသေချာစေရန်ပိတ်ဆို့ခြင်း mode ကိုအသုံးပြုသည်။
မက်ဆေ့ခ်ျကိုစာတစ်စောင်ပို့ခြင်းကပေးပို့ခြင်းနှင့်စောင့်ဆိုင်းခြင်းကိုကာကွယ်ရန်အတွက်ပေးပို့သည့်ကြားခံတွင်အချက်အလက်များရှိပါကပေးပို့ပါ။
ရေရှည်ဆွဲထားမှုကိုရှောင်ရှားရန်လက်ခံသူသည်ကျိုးကြောင်းဆီလျော်သောအချိန်ကုန်ကိုသတ်မှတ်သည်။
Multiplexing ကိုအောင်မြင်ရန် Socket_select ကို သုံးပါ။
အောက်ဖော်ပြပါအချက်များသည် TCP-based php socient server ဥပမာတစ်ခုဖြစ်သည် ။
<?php
$host = "0.0.0.0";
$port = 12345;
// ဖန်တီးsocket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $host, $port);
socket_listen($sock);
echo "Server started at $host:$port\n";
// စောင့်ကြည့်လေ့လာခြင်းကို set upsocketပိတ်ဆို့ mode ကို၌တည်၏,connection ကိုလက်ခံသည့်အခါ client ကိုစောင့်ဆိုင်း
socket_set_blocking($sock, true);
$clients = [];
while (true) {
// အသုံးပြု socket_select တက်ကြွစွာဆက်သွယ်မှုကိုနားထောင်ပါ
$read = $clients;
$read[] = $sock; // မော်နီတာ joinsocket
$write = [];
$except = null;
// လှုပ်ရှားမှုအတွက်စောင့်ဆိုင်းပိတ်ဆို့ခြင်းsocket
if (socket_select($read, $write, $except, 5) < 1) {
continue; // အချိန်အဘယ်သူမျှမလှုပ်ရှားမှု
}
// ဆက်သွယ်မှုအသစ်ဖြစ်စဉ်
if (in_array($sock, $read)) {
$newClient = socket_accept($sock);
if ($newClient !== false) {
socket_set_blocking($newClient, true); // client ကိုတက် settingsocketပိတ်ဆို့ခြင်းသည်,အာမခံအပြည့်အဝမက်ဆေ့ခ်ျကိုအာမခံ
$clients[] = $newClient;
echo "New client connected\n";
}
unset($read[array_search($sock, $read)]);
}
// ရှိပြီးသား 0 န်ဆောင်မှုခံယူသူများကို
foreach ($read as $client) {
$data = socket_read($client, 2048, PHP_NORMAL_READ);
if ($data === false || $data === '') {
// client ကို disconnection
echo "Client disconnected\n";
socket_close($client);
unset($clients[array_search($client, $clients)]);
continue;
}
$data = trim($data);
echo "Received: $data\n";
// ရိုးရှင်းသောပဲ့တင်သံ,စီးဆင်းမှုထိန်းချုပ်မှုနှင့်အတူ:မပို့ခင်သေချာအောင်လုပ်ပါsocketmode ကိုပိတ်ဆို့ခြင်း,ရေးမအောင်မြင်မှုကိုတားဆီး
socket_set_blocking($client, true);
$sendResult = socket_write($client, "Echo: $data\n");
if ($sendResult === false) {
echo "Failed to send message to client\n";
}
}
}
ပိတ်ဆို့ခြင်း mode ကိုပြောင်းလဲခြင်း <br> <br> နားထောင်ခြင်း socket နှင့် client socket နှစ်ခုစလုံးကိုပိတ်ဆို့ခြင်းကိုပိတ်ထားသည်။ အချက်အလက်များကိုဖတ်ခြင်းနှင့်ရေးသားခြင်းသည်စာဖတ်ခြင်းနှင့်စာတိုတိုတိုရေးသောစာတိုတိုရေးသောကြောင့်မပြည့်စုံသောမက်ဆေ့ခ်ျများကိုရှောင်ရှားရန်အာမခံနိုင်သည်။
Socket_select နားထောင်ပါ
Socket_select လုပ်ကွက်များကိုဖတ်ရှုခြင်းနှင့် Socket ကိုဖတ်ရန်စောင့်ဆိုင်းရန် CPU ကိုအသုံးပြုခြင်းနှင့် CPU အသုံးချခြင်းကိုတိုးတက်စေရန်နှင့်အသေကောင်ကိုစွန့်ပစ်ပစ္စည်းစွန့်ပစ်ပစ္စည်းများကိုရှောင်ရှားရန်စောင့်နေကြသည်။
မက်ဆေ့ခ်ျတန်းစီထိန်းချုပ်မှု (ကျယ်ပြန့်)
ဥပမာအားဖြင့်၎င်းကိုတိုက်ရိုက်ဖတ်ရှုခြင်းနှင့်တိုက်ရိုက်ရေးသားခြင်းဖြစ်သော်လည်း client network clockockiotion မှရှောင်ရှားရန်ပို့ရန်မက်ဆေ့ခ်ျတစ်ခုစီ၏အရွယ်အစားနှင့်ကြိမ်နှုန်းကိုထိန်းချုပ်ရန်လိုအပ်ချက်များနှင့်အညီစာတစ်စောင်ကိုထပ်ထည့်နိုင်သည်။
မြင့်မားသောတစ်ပြိုင်နက်တည်းလုပ်ဆောင်မှုကိုတိုးတက်စေရန် Event-Drivent ကဲ့သို့စာကြည့်တိုက်များ (ဥပမာ - လစ်ဗျား) နှင့်ပူးပေါင်းဆောင်ရွက်ရန် Non-blocking mode ကိုသုံးပါ။
မက်ဆေ့ခ်ျထုတ်လွှင့်ခြင်း၏သမာဓိကိုသေချာစေရန်မက်ဆေ့ခ်ျနံပါတ်နှင့်အတည်ပြုယန္တရားကိုမိတ်ဆက်ပေးပါ။
HeartBeat Packet Detection Connection Status ကိုအကောင်အထည်ဖော်ပါ။
TCP parameters များကို option လုပ်ရန် Socket_set_option ကို အသုံးပြုပါ။
PHP ၏ Socket_set_set_set_set_blocking function ကို အသုံးပြု. socket_select လုပ်ခြင်းဆိုင်ရာယန္တရားကို အသုံးပြု. ဖြည့်စွက်ခြင်းအားဖြင့် socket_select လုပ်ခြင်းဆိုင်ရာယန္တရားကိုပေါင်းစပ်ခြင်းအားဖြင့်ထိရောက်သောစာတိုပေးပို့ရေးစနစ်နှင့်ထိန်းချုပ်မှုစီးဆင်းမှုကိုတည်ဆောက်နိုင်သည်။ ထိန်းချုပ်မှုစီးဆင်းမှုသည်မက်ဆေ့ခ်ျထုတ်လွှင့်မှု၏တည်ငြိမ်မှုကိုသေချာစေရုံသာမကစနစ်၏တုန့်ပြန်မှုမြန်နှုန်းနှင့်သယံဇာတအသုံးချမှုတို့ကိုလည်းတိုးတက်စေသည်။ ဤဆောင်းပါး၏ပုံနမူနာများနှင့်အတွေးအခေါ်များသည်သင်၏ကိုယ်ပိုင်မက်ဆေ့ခ်ျစနစ်တည်ဆောက်ခြင်းတွင်သင့်အတွက်အထောက်အကူဖြစ်လိမ့်မည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။