ကွန်ယက်ပရိုဂရမ်တွင်အထူးသဖြင့်ရှည်လျားသောဆက်သွယ်မှုများပါ 0 င်သောအခြေအနေများတွင်ဆာဗာသည် client connections မျိုးစုံကိုစဉ်ဆက်မပြတ်နားထောင်ရန်နှင့်စီမံခန့်ခွဲရန်လိုအပ်သည်။ PHP သည်ကြွယ်ဝသော socket function ကိုထောက်ပံ့ပေးသည်။ Socket_accept () သည် client connection တောင်းဆိုမှုများကိုလက်ခံရရှိရန်အသုံးပြုသောအရေးကြီးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ဤဆောင်းပါးသည် Long Connection Connection အခြေအနေများတွင်ထိရောက်စွာဆက်သွယ်မှုစီမံခန့်ခွဲမှုရရှိရန် Socket_Accept ကို အသုံးပြုရမည်ကိုအသေးစိတ်မိတ်ဆက်ပေးပါလိမ့်မည်။
ရှည်လျားသောဆက်သွယ်မှုဆိုသည်မှာ client သည်ဆာဗာနှင့်ဆက်သွယ်မှုကိုတည်ဆောက်ပြီးနောက်ဆက်သွယ်မှုသည်ပွင့်လင်းမြင်သာမှုရှိနေသည်။ ပါတီနှစ်ခုစလုံးသည်ဆက်သွယ်မှုကိုအတိအလင်းပိတ်ထားသည်အထိဆက်လက်ဆက်သွယ်နိုင်သည်။ တိုတောင်းသောဆက်သွယ်မှုများနှင့်နှိုင်းယှဉ်လျှင်ရှည်လျားသောဆက်သွယ်မှုများသည်မကြာခဏဆိုသလိုပိုမိုခိုင်မာလာခြင်းနှင့်ပိတ်ခြင်းကိုပိတ်ခြင်းနှင့်ပိတ်ခြင်း၏ overhead ကိုလျော့နည်းစေသည်။
Socket_Accept () သည်နားထောင်ခြင်း socket မှဆက်သွယ်မှုတောင်းဆိုမှုကိုလက်ခံပြီး client နှင့်ဆက်သွယ်မှုအတွက် societ အရင်းအမြစ်အသစ်တစ်ခုကိုပြန်ပို့ရန်အသုံးပြုသည်။ ပုံမှန်အသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($serverSocket, '0.0.0.0', 8080);
socket_listen($serverSocket);
while (true) {
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
// အမှားများကိုကိုင်တွယ်
continue;
}
// Process client ကိုတောင်းဆိုမှုများ
}
ပြ problem နာကိုပိတ်ဆို့ခြင်း
Socket_Accept () သည်ပိတ်ဆို့ခြင်းခေါ်ဆိုမှုတစ်ခုဖြစ်သည်။ ဆက်သွယ်မှုတောင်းဆိုမှုမရှိပါကဤအစီအစဉ်သည်ဤနေရာတွင်ရပ်တန့်သွားမည်,
ဆက်သွယ်မှုစီမံခန့်ခွဲမှု Multi- ဆက်သွယ်မှုစီမံခန့်ခွဲမှု တစ်ချိန်တည်းတွင်တစ်ချိန်တည်းတွင်တစ်ချိန်တည်းတွင်တစ်ချိန်တည်းတွင်တစ်ချိန်တည်းတွင် client converts clients ဆက်သွယ်မှုမျိုးစုံ၏စစ်ဆင်ရေးများကိုစီမံရန်လိုအပ်သည်။
အရင်းအမြစ်သိမ်းယူ <br> <br> ရှည်လျားသောဆက်သွယ်မှုများသည်စနစ်အရင်းအမြစ်များကိုသိမ်းပိုက်ပြီးကျိုးကြောင်းဆီလျော်သောဖြန့်ချိခြင်းနှင့်ပြုပြင်ထိန်းသိမ်းမှုလိုအပ်လိမ့်မည်။
socket_set_set_set_set_set_nonblock () ဆက်သွယ်မှုကိုရှောင်ခြင်းနှင့်စောင့်ဆိုင်းခြင်းမပြုရန် socket_set_setblock () ကိုထားပါ။
socket_set_nonblock($serverSocket);
ဤအချိန် Socke_Accept () တွင်ပိတ်ဆို့ခြင်းမရှိပါကဆက်သွယ်မှုတောင်းဆိုမှုမရှိပါက မှားယွင်းစွာ ပြန်လာလိမ့်မည်။
Socket_select () သည် စာဖတ်ခြင်းကိုနားထောင်ရန်နှင့် Sockets မျိုးစုံကိုတစ်ပြိုင်နက်တည်းရေးရန်ခွင့်ပြုသည်။
နမူနာကုဒ်:
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($serverSocket, '0.0.0.0', 8080);
socket_listen($serverSocket);
socket_set_nonblock($serverSocket);
$clients = [];
while (true) {
$readSockets = $clients;
$readSockets[] = $serverSocket;
$write = $except = null;
$numChangedSockets = socket_select($readSockets, $write, $except, 0, 500000);
if ($numChangedSockets === false) {
// အမှားကိုင်တွယ်
break;
} elseif ($numChangedSockets > 0) {
// ဆက်သွယ်မှုအသစ်ရှိမရှိကိုနားထောင်ပါ
if (in_array($serverSocket, $readSockets)) {
$newClient = socket_accept($serverSocket);
if ($newClient !== false) {
socket_set_nonblock($newClient);
$clients[] = $newClient;
}
// လုပ်ငန်းများ၌နားထောင်ခြင်း sockets ဖယ်ရှားပါ
$key = array_search($serverSocket, $readSockets);
unset($readSockets[$key]);
}
// client data လုပ်ငန်းစဉ်
foreach ($readSockets as $clientSocket) {
$data = @socket_read($clientSocket, 1024, PHP_NORMAL_READ);
if ($data === false || $data === '') {
// client ကို connection ကိုပိတ်လိုက်
$key = array_search($clientSocket, $clients);
socket_close($clientSocket);
unset($clients[$key]);
} else {
$data = trim($data);
if ($data) {
// 这里client data လုပ်ငန်းစဉ်
socket_write($clientSocket, "ဆာဗာကိုလက်ခံရရှိခဲ့သည်: $data\n");
}
}
}
}
// HeartBeat detection ကိုဤနေရာတွင်ထည့်နိုင်သည်、အချိန်ကုန်အပြောင်းအလဲနဲ့နှင့်အခြားယုတ္တိဗေဒ
}
HeartBeat ယန္တရား - 0 န်ဆောင်မှုခံယူသူ၏ရှင်သန်ရပ်တည်ရေးကိုရှာဖွေရန်နှင့်အချိန်မီမမှန်ကန်သောဆက်သွယ်မှုများကိုပိတ်ပါ။
Connection pool : သယံဇာတပင်ပန်းနွမ်းနယ်မှုကိုရှောင်ရှားရန်အမြင့်ဆုံးဆက်သွယ်မှုအရေအတွက်ကိုကန့်သတ်ပါ။
အချိန် ကြာမြင့်စွာ data interaction မရှိသောအနီးကပ်ဆက်သွယ်မှုများ။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသတ်မှတ်ခြင်းနှင့် Socket_election နည်းပညာကိုပေါင်းစပ်ခြင်းဖြင့် PHP သည် Long Connections ၏တစ်ပြိုင်နက်တည်းလုပ်ဆောင်မှုများကိုစီမံခန့်ခွဲရန် Socket_Accept () ကို ထိရောက်စွာအသုံးပြုနိုင်ပြီး 0 န်ဆောင်မှုပေးသောဆက်သွယ်မှုများစွာကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်းကိုရှာဖွေခြင်း, ဆင်ခြင်တုံတရားဖြင့်ချိတ်ဆက်ခြင်းနှင့်အရင်းအမြစ်စီမံခန့်ခွဲမှုယန္တရားများကိုဒီဇိုင်းဆွဲခြင်းယန္တရားများသည်တည်ငြိမ်သော server လည်ပတ်မှုနှင့်ရှည်လျားသောဆက်သွယ်မှုအခြေအနေများတွင်စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။