ထိရောက်သောကွန်ယက် 0 န်ဆောင်မှုများတည်ဆောက်ရာတွင်အံမှုသည်ရှောင်ရှားနိုင်သည့်အရေးကြီးသောညွှန်ပြချက်ဖြစ်သည်။ အထွေထွေ scripting language တစ်ခုအနေဖြင့် PHP သည် sociec_acception () function ကို အသုံးပြု. Socket_Accept () function ကိုအသုံးပြုသောကွန်ယက်ပရိုဂရမ်းမင်းတွင်ကြွယ်ဝသော APIs များကိုလည်းထောက်ပံ့ပေးသည်။ ၎င်းသည်အတော်လေးရိုးရှင်းစွာအသုံးပြုသော်လည်း အကယ်. သင်သည်အစက်အပြောက်နည်းပါးပြီးတစ်ပြိုင်နက်တည်း 0 န်ဆောင်မှုကိုတည်ဆောက်လိုပါကအကောင်းဆုံးနည်းစနစ်များနှင့်လက်တွေ့ကျသောလျှောက်လွှာနည်းလမ်းများစီးရီးများပြုလုပ်ရန်လိုအပ်သည်။
Socket_Accept () သည် Sockets မှဆက်သွယ်မှုတောင်းဆိုမှုများကိုလက်ခံရန် PHP Socket extension မှပေးသော function တစ်ခုဖြစ်သည်။ Socket_Create () socket_bind) မှတဆင့် socket_binden ()) , socket_binden (), socket_listen ( ) သည် socket_listen () သည် socket_listen () socket_listen () socket_cleten () socket_cleten () ကိုချည်နှောင်လိုက်သည်နှင့်တပြိုင်နက် socket_cleten () သည် socket_cleten () သည် socket_create () သည် socket_create () သည် socket_create () ကိုစလိုက်သည်။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080);
socket_listen($socket);
while (true) {
$client = socket_accept($socket);
if ($client) {
socket_write($client, "အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည် m66.net ကွန်ယက်ဝန်ဆောင်မှုများ\n");
socket_close($client);
}
}
အထက်ပါကုဒ်သည်အခြေခံ TCP server ကိုတည်ဆောက်သည်။ သို့သော်၎င်း၏စွမ်းဆောင်ရည်သည် "latency litency" လိုအပ်ချက်နှင့်မကိုက်ညီပါ။
i / o ပိတ်ဆို့ခြင်းကြောင့်ဖြစ်ရတဲ့နှောင့်နှေးခြင်း ပုံမှန်အားဖြင့် Socket_Accept () သည်ပိတ်ဆို့ခြင်းခေါ်ဆိုမှုတစ်ခုဖြစ်သည်။ ဆိုလိုသည်မှာ client connection မရှိပါသည့်အခါဇာတ်ညွှန်းသည်ထိုမျဉ်းကိုရပ်တန့်သွားပြီး,
အမှတ်စဉ်အပြောင်းအလဲနဲ့ဆက်သွယ်မှု <br> ဖောက်သည်တစ် ဦး တည်းသာလျှင်တစ်ပြိုင်နက်တည်းကတစ်ပြိုင်နက်တည်းစွမ်းရည်ချို့တဲ့သောအချိန်များတွင်လုပ်ငန်းများ၌ပြုလုပ်သည်။
မလျော်ကန်သောအရင်းအမြစ်စီမံခန့်ခွဲမှု <br> <br> ဆက်သွယ်မှုကိုအချိန်တိုအတွင်းဖြန့်ချိရန်ပျက်ကွက်ခြင်း, အချိန်ကုန်ကိုမသတ်မှတ်ခြင်း,
ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket_set_nonblock () ကို ဖြတ်. ပိတ်ထားနိုင်သည်။
socket_set_nonblock($socket);
$clients = [$socket];
while (true) {
$read = $clients;
if (socket_select($read, $write = null, $except = null, 0, 200000)) {
foreach ($read as $sock) {
if ($sock === $socket) {
$client = socket_accept($socket);
if ($client !== false) {
socket_set_nonblock($client);
$clients[] = $client;
socket_write($client, "အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည် m66.net!\n");
}
} else {
$data = socket_read($sock, 1024, PHP_NORMAL_READ);
if ($data === false || $data === "") {
$index = array_search($sock, $clients);
socket_close($sock);
unset($clients[$index]);
} else {
socket_write($sock, "မင်းဒါကိုပို့လိုက်တယ်: $data");
}
}
}
}
}
reception ည့်ခံခြင်းနှင့်ထုတ်လွှင့်သည့်အချိန်ကို soceck_set_set_set_option () connection ပြ problems နာများကြောင့်ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန် Socket_set_Set_option () ကိုထိန်းချုပ်နိုင်သည်။
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ["sec"=>1, "usec"=>0]);
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ["sec"=>1, "usec"=>0]);
ထောင်ပေါင်းများစွာသောဆက်သွယ်မှုများကိုသယ်ဆောင်ရန်လိုအပ်သောအမြင့်ဆုံး applicency များအတွက် applications များအတွက် Libevent သို့မဟုတ် SWool စသည့် extensions များကိုအသုံးပြုရန်အကြံပြုသည်။ ၎င်းတို့သည်ပိုမိုထိရောက်သော epoll /ue မော်ဒယ်များကိုအောက်ခြေတွင်အသုံးပြုသည်။ ၎င်းသည်ကျွန်ုပ် / o latency ကိုများစွာလျော့နည်းစေသည်။
// အသုံးပြု Swoole 实现高性能ကွန်ယက်ဝန်ဆောင်မှုများ
$server = new Swoole\Server("0.0.0.0", 9501);
$server->on("connect", function ($server, $fd) {
$server->send($fd, "အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည် m66.net ကွန်ယက်ဝန်ဆောင်မှုများ\n");
});
$server->on("receive", function ($server, $fd, $reactor_id, $data) {
$server->send($fd, "မင်းဒါကိုပို့လိုက်တယ်:$data");
});
$server->on("close", function ($server, $fd) {
echo "ဖောက်သည် {$fd} ပိတ်ထားသော\n";
});
$server->start();
Real-time data ရယူခြင်း 0 န်ဆောင်မှု - IOT Device မှ IOT devices များမှအချက်အလက်များကိုပိတ်ဆို့ခြင်းမဟုတ်သော socket များမှတဆင့်ရယူပါ။
အွန်လိုင်းစကားပြောခန်း - အမြင့်ဆုံး concurt chat 0 န်ဆောင်မှုများတည်ဆောက်ရန် SWOOLE ကိုအသုံးပြုပါ။
Game Server Backend : အသေးစားစစ်ပွဲဂိမ်းများသည် latency player ဆက်သွယ်ရေးကိုအောင်မြင်ရန်ဇာတိ sockets များကိုသုံးနိုင်သည်။
API Gateway - တောင်းဆိုမှုများကိုလက်ခံရရှိရန်နှင့် cache data များကိုလျင်မြန်စွာတုံ့ပြန်ရန်အလယ်အလတ်အလွှာ socket 0 န်ဆောင်မှုကိုတည်ဆောက်ပါ။
Socket_Accept () သည် PHP ရှိအခြေခံလုပ်ဆောင်ချက်ဖြစ်သည်, အကယ်. အမှန်တကယ် latency ကိုအနိမ့်အမြင့်ဆုံး 0 န်ဆောင်မှုပေးရန်, ပိတ်ဆို့ခြင်းမရှိသော I / o, အထက်ပါကျွမ်းကျင်မှုများ၏အကူအညီဖြင့် PHP ပတ်ဝန်းကျင်တွင်ပင်လျှင်တုန့်ပြန်မှုနှင့်တည်ငြိမ်သော server-side manytecture ကိုဖန်တီးရန်,