PHP Socket သည် default mode ကို default blocking နေသည်။ ဆိုလိုသည်မှာသင်စာဖတ်ခြင်းသို့မဟုတ်အရင်းအမြစ်များအဆင်သင့်မဖြစ်သေးပါကခေါ်ဆိုမှုသည်စောင့်ဆိုင်းရန်စောင့်ဆိုင်းလိမ့်မည်။ ပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်းအစားခေါ်ဆိုမှုသည်ချက်ချင်းပြန်လာလိမ့်မည်။
Socket_set_Set_Block ($ socket) ကို အသုံးပြု ပါ။
Socket_select သည် Multiplect function တစ်ခုဖြစ်ပြီးစာဖတ်ခြင်းနှင့်ရေးသားခြင်းသို့မဟုတ်ချွင်းချက်ပေးရန်သို့မဟုတ်ရေးရန်သို့မဟုတ်ရှိသည်။ ၎င်း၏အခြေခံဖွဲ့စည်းပုံမှာအောက်ပါအတိုင်းဖြစ်သည် -
socket_select(array &$read, array &$write, array &$except, int $tv_sec, int $tv_usec)
$ ဖတ်ရန် : Socket Array "Readable" ပြည်နယ်ကိုစောင့်ဆိုင်းနေသည်
$ ရေးရန် : Socket Array ",
$ မှလွဲ ။ - "ခြွင်းချက်" ပြည်နယ်ကိုစောင့်ဆိုင်း - Socket Array
$ tv_sec / $ tv_usec : စက္ကန့်ပိုင်းနှင့် microseconds အတွက်အချိန်ကုန်စောင့်ဆိုင်းခြင်း
အောက်ပါသည် client_set_sc_block ကို Socket_ssc_Block ဖြင့်အသုံးပြုသော TCP-based server ဥပမာတစ်ခုဖြစ်သည်။
<?php
// ဖန်တီး TCP Sockets
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// လိပ်စာပြန်လည်အသုံးပြုပါ
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
// ချည်နေှာင် IP နှင့် ports
socket_bind($socket, '0.0.0.0', 8080);
// စောင့်ကြည့်လေ့လာရေးစတင်ပါ
socket_listen($socket);
// mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
socket_set_block($socket);
echo "Server started on gitbox.net:8080\n";
// အဓိကကွင်းဆက်
while (true) {
// နားထောင်ခြင်းခင်းကျင်းမှုကိုအစပြုပါ
$read = [$socket];
$write = $except = [];
// အသုံးပြု socket_select ပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်း
$changed_sockets = socket_select($read, $write, $except, 0, 0);
if ($changed_sockets === false) {
echo "socket_select failed: " . socket_strerror(socket_last_error()) . "\n";
break;
}
// အဓိကလျှင် socket ဖတ်နိုင်သော,ဆက်သွယ်မှုအသစ်တစ်ခုရှိကြောင်းဖော်ပြသည်
if (in_array($socket, $read)) {
$client = socket_accept($socket);
if ($client !== false) {
echo "New client connected\n";
// client ကိုမှမက်ဆေ့ခ်ျပို့ပါ
$msg = "Welcome to gitbox.net server!\n";
socket_write($client, $msg, strlen($msg));
// Client Convice Connection
socket_close($client);
}
}
}
// အဓိကပိတ်ပါ socket
socket_close($socket);
?>
အပြုအမူကိုပိတ်ဆို့ခြင်း - Socket_set_block ကို အသုံးပြုသည်, connection တောင်းဆိုမှုမရှိပါက Socket_Accept သည် ပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်းလိမ့်မည်။ socket_select နှင့်အတူပေါင်းစပ်, ချည်ပျင်းရိရှောင်ရှားနိုင်ပါတယ်။
ပြောင်းလွယ်ပြင်လွယ်အချိန်ကုန်ထိန်းချုပ်မှု - Socket_select ၏ Socket_select လုပ်ခြင်းသည်ပိတ်ဆို့ခြင်းအချိန်ကိုထိန်းချုပ်ရန်အသုံးပြုနိုင်သည်။
Multi-client support : $ ဖတ်ရန် ခင်းကျင်းရန် Socket မျိုးစုံထည့်ခြင်းဖြင့် Socket_select သည် ဆက်သွယ်မှုမျိုးစုံကိုထိရောက်စွာထောက်ခံနိုင်ပြီးတစ်ပြိုင်နက်တည်း concurnency server တစ်ခုတည်ဆောက်ရန်ပိုမိုလွယ်ကူစေနိုင်သည်။