Two-Time Time Componnication, websound နည်းပညာကိုအွန်လိုင်းစကားပြောခြင်း, Real-time push, game interacation နှင့်အခြားအခြေအနေများတွင်ကျယ်ပြန့်စွာအသုံးပြုသည်။ PHP ကို အသုံးပြု. WebSound 0 န်ဆောင်မှုများကိုတည်ဆောက်ရာတွင်ကွန်ယက်ဆက်သွယ်မှု၏စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုသည်အဓိကကျသည်။ PHP Socket ပရိုဂရမ်တွင်အရေးကြီးသောကိရိယာတစ်ခုအနေဖြင့် Socket_set_Set_Block function သည် socket ၏ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သောနေရာများကိုထိရောက်စွာထိန်းချုပ်နိုင်ပြီးဝက်ဘ်ဆိုက်များ 0 န်ဆောင်မှုများအပေါ်တုံ့ပြန်မှုမြန်ဆန်မှုနှင့်အရင်းအမြစ်အသုံးချမှုကိုပိုမိုကောင်းမွန်စေရန်အထောက်အကူပြုနိုင်သည်။
ဤဆောင်းပါးသည်လက်တွေ့ကျသောစီမံကိန်းအတွေ့အကြုံကိုအတိမ်အချင်း socket_set_block function ကိုအတိမ်အနက်ဖြင့်ရှင်းပြရန်နှင့်လက်တွေ့ကျသောကျွမ်းကျင်မှုများကိုဝေမျှရန်အတိမ်အနက်ဖြင့်ရှင်းပြပါလိမ့်မည်။
Socket_set_BLOCK သည် PHP မှပေးသော function တစ်ခုဖြစ်ပြီး Socket သည်ပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်းပုံစံရှိလား။ ပိတ်ဆို့ခြင်း mode မှာ blocking mode မှာ socket operations (ဥပမာ, စာရေးခြင်းကဲ့သို့သော) သည်မထွက်ခွာမီလုပ်ဆောင်ရန်စောင့်ဆိုင်းနေလိမ့်မည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်စစ်ဆင်ရေးသည်ချက်ချင်းပြန်လာလိမ့်မည်။
<?php
// တည်ဆောက်သည် socket ပိတ်ဆို့ mode ကို၌တည်၏
socket_set_block($socket);
// တည်ဆောက်သည် socket Non-blocking mode မှာ
socket_set_nonblock($socket);
?>
Websocket 0 န်ဆောင်မှုများတွင်ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းသည်စွမ်းဆောင်ရည်အပေါ်ကြီးမားသောသက်ရောက်မှုရှိသည်။
mode ကိုပိတ်ဆို့ခြင်း <br> <br> ရိုးရှင်းသောအခြေအနေများအတွက်သင့်တော်သည်မှာ code စီးဆင်းမှုသည်အလိုလိုသိသော်လည်း,
Non-blocking mode <br> <br> ဆာဗာကိုချက်ချင်းပြန်ပို့ရန်ခွင့်ပြုသည်။ သို့သော်ပရိုဂရမ်းမင်းရှုပ်ထွေး မှု တိုးပွားလာသည်။
အမှန်တကယ်စီမံကိန်းများတွင်ကျွန်ုပ်၏အတွေ့အကြုံမှာ "ပြောင်းလွယ်ပြင်လွယ်ခလုတ်" မဟာဗျူဟာကိုကျင့်သုံးရန်ဖြစ်သည်။
Connection increase phase : connection handshake ကိုယုံကြည်စိတ်ချစွာပြီးစီးရန်သေချာစေရန် socket ကိုပိတ်ထားရန် socket ထားပါ။
ဒေတာထုတ်လွှင့်မှုအဆင့် - ပိတ်ဆို့ခြင်းမဟုတ်သောနေရာများသို့ပြောင်းပါ။ Socket_select ကိုဖွင့်ပြီးပိတ်ဆို့ခြင်းကြောင့်ဖြစ်ပေါ်လာသောစွမ်းဆောင်ရည်မြှင့်တင်ခြင်းကိုရှောင်ရှားရန် Socket_Select ကိုပေါင်းစပ်ပါ။
နမူနာကုဒ်အတိုအထွာ:
<?php
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($serverSocket, '0.0.0.0', 9501);
socket_listen($serverSocket);
socket_set_block($serverSocket);
while (true) {
$clientSocket = socket_accept($serverSocket);
if ($clientSocket !== false) {
// လက်ဆွဲနှုတ်ဆက်ခြင်းကိုဖြည့်ပါ,တည်ဆောက်သည်非阻塞模式,ပြတ်တောင်းပြတ်တောင်းအပြောင်းအလဲနဲ့စတင်ပါ
socket_set_nonblock($clientSocket);
// သေတမ်းစာ $clientSocket ဖောက်သည်စာရင်းထဲသို့ထည့်ပါ,နောက်ပိုင်းတွင်အသုံးပြုပါ socket_select ကိုင်တွယ်ဖြေရှင်းသည်
$clients[] = $clientSocket;
}
// အသုံးပြု socket_select ဖောက်သည်မျိုးစုံကိုနားထောင်ပါ,ပိတ်ဆို့မှုကိုရှောင်ကြဉ်ပါ
$read = $clients;
$write = null;
$except = null;
if (socket_select($read, $write, $except, 0, 200000) > 0) {
foreach ($read as $readSocket) {
$data = socket_read($readSocket, 2048);
if ($data === false || $data === '') {
// ဆက်သွယ်မှုပိတ်ထားသောသို့မဟုတ်အမှား,အရင်းအမြစ်များကိုသန့်ရှင်းရေး
$index = array_search($readSocket, $clients);
unset($clients[$index]);
socket_close($readSocket);
} else {
// ကိုင်တွယ်ဖြေရှင်းသည် WebSocket ဒေတာဘောင်
// ...
}
}
}
}
?>
ရေရှည်ပိတ်ဆို့ခြင်းကိုရှောင်ကြဉ်ပါ ။ အကယ်. client သည်မတုံ့ပြန်ပါကဖြစ်စဉ်ကိုဆွဲထားနိုင်သည်။ အချိန်ကုန်ထိန်းချုပ်မှုကိုထိန်းချုပ်ရန်သို့မဟုတ်ပိတ်ဆို့ခြင်းကိုအတတ်နိုင်ဆုံးအသုံးချရန်အကြံပြုသည်။
Socket_select ကိုကျိုးကြောင်းဆီလျော်စွာအသုံးပြုခြင်း - ပိတ်ဆို့ခြင်းမဟုတ်သော mode နှင့်ပေါင်းစပ်။ ဆာဗာသည်တစ်ချိန်တည်းတွင်ဆက်သွယ်မှုများစွာကိုကိုင်တွယ်နိုင်ပြီး throughpput ကိုတိုးတက်စေနိုင်သည်။
အမှားကိုင်တွယ်ပုံကိုအသေးစိတ်ဖော်ပြသင့်သည် - ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင် Socket_read တွင် EAGAY ကဲ့သို့သောအမှားကုဒ်ကိုပြန်ပို့နိုင်သည်။
မှတ်ဉာဏ်စီမံခန့်ခွဲမှု - မှတ်ဉာဏ်ယိုစိမ့်မှုကိုကာကွယ်ရန် disconnected socket ကိုပိတ်ပါ။
PHP တရားဝင် Socket function လက်စွဲစာအုပ်
<code> https://gitbox.net/menual/en/function.php </ code>
WebSocol protocol standard (RFC 6455)
<Code> https://gitbox.net/rfc6455 </ code>