PHP Development တွင်စွမ်းဆောင်ရည်နှင့်တုန့်ပြန်မှုနှုန်းသည်ရှည်လျားသောဆက်သွယ်မှုများကိုကိုင်တွယ်သည့်အခါအဓိကထည့်သွင်းစဉ်းစားမှုများဖြစ်သည်။ PHP default societ socket လုပ်ငန်းလည်ပတ်မှုသည်ပိတ်ဆို့ခြင်းဖြစ်သည်။ ဆိုလိုသည်မှာပရိုဂရမ်သည်စာဖတ်ခြင်းသို့မဟုတ်ရေးခြင်းစစ်ဆင်ရေးကိုခေါ်သည့်အခါ၎င်းသည်စစ်ဆင်ရေးပြီးစီးသည်အထိစောင့်ဆိုင်းလိမ့်မည်။ ဤအဆုံးတွင် Socket_set_set_block function ကို function function ကို အသုံးပြု. PHP Long Connections ၏စွမ်းဆောင်ရည်ကိုထိထိရောက်ရောက်ကောင်းမွန်စေနိုင်သည်။
Socket_set_Block သည် Socket Blocking Mode ကိုသတ်မှတ်သည့် PHP တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်း၏ရည်ရွယ်ချက်မှာ socket blocking ကိုစောင့်ရှောက်ရန်ဖြစ်သည်။ ပိတ်ဆို့ခြင်း mode တွင်အချက်အလက်များအဆင်သင့်ဖြစ်သည့်အတွက်ဖတ်ရန်သို့မဟုတ်ရေးရန်စစ်ဆင်ရေးသည်မပြန်မီပြီးစီးသည်အထိစာဖတ်ခြင်းသို့မဟုတ်ရေးခြင်းစစ်ဆင်ရေးသည်စောင့်ဆိုင်းလိမ့်မည်။
bool socket_set_block ( resource $socket )
parameter $ socket : blocking mode ကိုသတ်မှတ်ရန် Socket Reusice ။
Reward Value: အောင်မြင်မှုအောင်မြင်ပါကအဖြေရှာလျှင် မအောင်မြင် ပါ ။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသတ်မှတ်ရန်အသုံးပြုသော socket_set_set_nonblock နှင့်သက်ဆိုင်သည်။
Blocking Mode : စာဖတ်ခြင်းနှင့်ရေးခြင်းလုပ်ငန်းများကိုလုပ်ဆောင်သောအခါအစီအစဉ်သည်စစ်ဆင်ရေးပြီးစီးသည်အထိသို့မဟုတ်အချိန်ကုန်သက်သာသည်အထိစောင့်ဆိုင်းနေသည်။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode : စာဖတ်ခြင်းနှင့်ရေးခြင်းလုပ်ငန်းများကိုဖျော်ဖြေသောအခါအစီအစဉ်သည်ချက်ချင်းပြန်လာပြီးအချက်အလက်မရှိတော့ပါ။
ရှည်လျားသောဆက်သွယ်မှုတွင်ပိတ်ဆို့ခြင်း mode ကိုအသုံးပြုပါကအချက်အလက်များကိုစောင့်ဆိုင်းနေစဉ်ပရိုဂရမ်သည်အခြားတောင်းဆိုမှုများကိုအချိန်မီလုပ်ဆောင်နိုင်ခြင်းမရှိသေးပါ။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode သည်တစ်ပြိုင်နက်တည်းတိုးတက်လာနိုင်သော်လည်းကုဒ်ရှုပ်ထွေးမှုများကိုတိုးမြှင့်ရန်အတွက်နောက်ထပ်မဲရုံနှင့်ပြည်နယ်တရားစီရင်ခြင်းလိုအပ်သည်။
ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သော modes များအကြားပိုမိုပြောင်းလဲခြင်းသည် PHP ကိုစွမ်းဆောင်ရည်နှင့်တုန့်ပြန်မှုများကိုရှည်လျားသောဆက်သွယ်မှုများတွင်ထည့်သွင်းစဉ်းစားရန်ခွင့်ပြုသည်။ တိကျသောနည်းဗျူဟာများမှာ -
Connection ကိုသာတည်ထောင်ပြီးသည့်အခါ၎င်းသည်အချက်အလက်များကိုစောင့်ဆိုင်းခြင်းကြောင့်အစီအစဉ်ကိုချိတ်ဆွဲခြင်းမှကာကွယ်ရန်တားမြစ်ခြင်းမရှိသော mode ကိုသတ်မှတ်ထားသည်။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, "gitbox.net", 80);
socket_set_nonblock($socket);
ဥပမာအားဖြင့်, fixed-length data ကိုဖတ်ရန်ပြင်ဆင်နေသည့်အခါအချက်အလက်များကိုနဂိုအတိုင်းဖတ်ပြီး packet ကိုဖတ်ရန်နှင့် packet ပြ problems နာများကိုရှောင်ရှားရန်ပိတ်ဆို့ခြင်း mode ကိုသုံးပါ။
socket_set_block($socket);
$data = socket_read($socket, 1024);
Socket_select ကို အသုံးပြု. Socket တွင် detect ကို အသုံးပြု. မမှန်ကန်သောစောင့်ဆိုင်းမှုကိုဖတ်ရန်နှင့်လျှော့ချရန်အချက်အလက်များရှိ,
$read = [$socket];
$write = $except = null;
if (socket_select($read, $write, $except, 5) > 0) {
socket_set_block($socket);
$data = socket_read($socket, 1024);
// အချက်အလက်များကိုထုတ်ယူခြင်း
} else {
// အချိန်ကုန် processing သို့မဟုတ်အခြားယုတ္တိဗေဒ
}
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create failed: " . socket_strerror(socket_last_error()));
}
$result = socket_connect($socket, "gitbox.net", 80);
if ($result === false) {
die("socket_connect failed: " . socket_strerror(socket_last_error($socket)));
}
// Non-blocking ကိုပထမ ဦး ဆုံးထားပါ,stuck အစီအစဉ်ကိုရှောင်ကြဉ်ပါ
socket_set_nonblock($socket);
// တောင်းဆိုမှုကိုပို့ပါ
$request = "GET / HTTP/1.1\r\nHost: gitbox.net\r\nConnection: keep-alive\r\n\r\n";
socket_write($socket, $request, strlen($request));
// အသုံးပြု socket_select ဖတ်ရန်အချက်အလက်များကိုစောင့်ပါ
$read = [$socket];
$write = $except = null;
$timeout_sec = 5;
if (socket_select($read, $write, $except, $timeout_sec) > 0) {
// ဒေတာအဆင်သင့်ဖြစ်လျှင်ပိတ်ဆို့ခြင်း mode ကိုမှ switch,ပြီးပြည့်စုံသောဒေတာကိုဖတ်ပါ
socket_set_block($socket);
$response = '';
while ($out = socket_read($socket, 2048)) {
$response .= $out;
if (strlen($out) < 2048) {
break;
}
}
echo $response;
} else {
echo "ဒေတာအချိန်ကုန်သို့မဟုတ်ဒေတာအဘယ်သူမျှမဒေတာကိုစောင့်ဆိုင်း";
}
socket_close($socket);
?>
Socket_set_block သည် socket opercy များကိုပိတ်ဆို့ခြင်း mode ကိုဖွင့်ရန်ခွင့်ပြုသည်။
မလိုအပ်သော mode နှင့် socket_select နှင့်ဆင်ခြေဖုံးတက်ခြင်းနှင့် Socket_select သည်ရှည်လျားသောဆက်သွယ်မှုများ၌မလိုအပ်ဘဲစောင့်ဆိုင်းခြင်းများကိုရှောင်ကြဉ်ပါ။
ရှည်လျားသောဆက်သွယ်မှုစွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေရန်သော့ချက်မှာပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းကိုပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမရှိခြင်းကိုပြောင်းလွယ်ပြင်လွယ်ထိန်းချုပ်ရန်နှင့်အရင်းအမြစ်စွန့်ပစ်ပစ္စည်းများကိုလျှော့ချရန်အတွက်ဖြစ်ရပ်ထောက်လှမ်းရေးယန္တရားများနှင့်ပေါင်းစပ်ခြင်းဖြစ်သည်။
အထက်ပါနည်းလမ်းများမှတစ်ဆင့် PHP Long Connection Procession သည်ပိုမိုထိရောက်စွာတည်ငြိမ်ပြီးတည်ငြိမ်သောစွမ်းဆောင်ရည်နှင့်တုံ့ပြန်မှုအချိန်လိုအပ်ချက်များနှင့်အတူကွန်ယက်လျှောက်လွှာအခြေအနေများအတွက်သင့်တော်သည်။