Socket_set_block သည် PHP တွင် function တစ်ခုဖြစ်သည်။ ပိတ်ဆို့ခြင်း mode ကိုဆိုသည်မှာ Socket ၏ဖတ်ခြင်းနှင့်ရေးခြင်းစစ်ဆင်ရေးများသည်မထွက်ခွာမီပြီးစီးရန်ဒေတာများကိုစောင့်ဆိုင်းမည်ဟုဆိုလိုသည်။
function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
bool socket_set_block ( resource $socket )
ခေါ်ဆိုမှုသည်အောင်မြင်မှုအတွက် စစ်မှန် ပြီးပျက်ကွက်ပြီးနောက် မှားယွင်းသော အရာဖြစ်သည်။
PHP-FPM (Fasticgi Process Manager Manager) သည် PHP ၏လုပ်ငန်းစဉ်စီမံခန့်ခွဲမှုလုပ်ငန်းစဉ်စီမံခန့်ခွဲမှုဖြစ်စဉ်တစ်ခုဖြစ်သည်။ PHP-FPM ၏လုပ်ငန်းယန္တရားသည်ကလေးသူငယ်များအားတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ရန်ဖြစ်သည်, တောင်းဆိုမှုတစ်ခုစီသည်လွတ်လပ်စွာပြေးလွှားနိုင်ပြီး,
ဤ Multi-process model သည်ပိတ်ဆို့ခြင်းလုပ်ငန်းများပိတ်ဆို့ခြင်းအတွက်သည်းခံခြင်းအကန့်အသတ်ဖြင့်အကန့်အသတ်ဖြင့်အကန့်အသတ်ရှိသည်။
Socket_set_Set_Block ကို ပိတ်ဆို့ခြင်း mode ကို socket သို့ socket သို့သတ်မှတ်ရန်အသုံးပြုသည်ဆိုပါကအချက်အလက်များကိုအချိန်မီအဆင်သင့်မဖြစ်သေးပါကသက်ဆိုင်ရာလုပ်ငန်းစဉ်သည် PHP-FPM ၏လုပ်ငန်းစဉ်အရင်းအမြစ်များကိုသိမ်းပိုက်မည့်အချက်အလက်များကိုစောင့်ဆိုင်းနေလိမ့်မည်။
ဥပမာအားဖြင့်:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, "gitbox.net", 80);
socket_set_block($socket);
// ဒေတာကိုဖတ်တဲ့အခါ,ဆာဗာဖြည်းဖြည်းချင်းတုံ့ပြန်လျှင်,ဒီမှာပိတ်ဆို့လိမ့်မယ်
$response = socket_read($socket, 2048);
echo $response;
PHP-FPM တွင်တောင်းဆိုမှုများသည်တစ်ချိန်တည်းတွင်အလားတူပိတ်ဆို့မှုများပြုလုပ်နေပါက၎င်းသည်လုပ်ငန်းစဉ်ရေကန်တွင်တင်းတင်းကျပ်ကျပ်အရင်းအမြစ်များကိုဖြစ်ပေါ်စေနိုင်သည်။
စစ်ဆင်ရေးပိတ်ဆို့ခြင်းဆိုသည်မှာလုပ်ငန်းစဉ်သည်အချက်အလက်များကိုစောင့်ဆိုင်းနေစဉ်ဖြစ်စဉ်တစ်ခုသည်အခြားအလုပ်များကိုမလုပ်ဆောင်နိုင်ဟုဆိုလိုသည်။ PHP-FPM ရှိလုပ်ငန်းစဉ်အရေအတွက်မှာအကန့်အသတ်ရှိသည်။ ၎င်းသည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုတိုက်ရိုက်ကန့်သတ်ထားသည်။ အထူးသဖြင့်မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ် 0 န်းကျင်တွင်ပိတ်ဆို့ခြင်း mode သည်စွမ်းဆောင်ရည်ကောင်းမွန်အောင်လုပ်ရန်အထောက်အကူပြုခြင်းမရှိပါ။
PHP-FPM ကိုယ်တိုင်ကတောင်းဆိုချက်အချိန်သတ်မှတ်ခြင်းကိုထောက်ခံသည်။
ပိတ်ဆို့ခြင်း mode ကိုပိတ်ဆို့မည့်အစား Socket_set_nonBlock ကို သုံးပါ ။ ဥပမာအားဖြင့်:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, "gitbox.net", 80);
socket_set_nonblock($socket);
$write = [$socket];
$except = null;
$read = null;
// အသုံးပြုsocket_selectအဆင်သင့်ဖြစ်ဖို့စာကိုစောင့်ပါ,ပိတ်ဆို့မှုကိုရှောင်ကြဉ်ပါ
if (socket_select($read, $write, $except, 5) > 0) {
socket_write($socket, "GET / HTTP/1.1\r\nHost: gitbox.net\r\n\r\n");
}
အကယ်. သင်သည်ပိတ်ဆို့ခြင်း mode ကိုအသုံးပြုရမည်ဆိုပါကလုပ်ငန်းစဉ်၏ရေရှည်ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန် Socket Timeout ကိုသေချာစွာထားပါ။
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 5, 'usec' => 0]);
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ['sec' => 5, 'usec' => 0]);
socket_set_block($socket);
PM.Max_children ကို configure လုပ်ခြင်းအရ, ရေတိုပိတ်ဆို့ခြင်းကိုကိုင်တွယ်ရန်လုပ်ငန်းစဉ်များအလုံအလောက်ရှိရန်သေချာစေရန်လိုအပ်သည့်အတွက်လုပ်ငန်းစဉ်များအလုံအလောက်ရှိရန်သေချာစေရန်အတွက်၎င်းသည်ကယ်ဆယ်ရေးအစီအစဉ်နှင့်မှီခိုမှုများကိုမထောက်ခံပါ။
မြင့်မားသောစွမ်းဆောင်ရည်လိုအပ်ချက်များအတွက်, allynchronous liblnchronous libraries (ဥပမာ Reflephp ) သို့မဟုတ် swoole extensions များအတွက်အသုံးပြုရန်အကြံပြုသည်။ ဤဖြေရှင်းချက်များသည် PHP-FPM အပြင်ဘက်တွင်ပိုမိုကျယ်ပြန့်သောဆက်သွယ်မှုများနှင့်ပြတ်တောင်းချက်များနှင့်ပြတ်တောင်းပြတ်တောင်းဖြန့်ချိမှုများအတွက်ပိုမိုသင့်တော်သည်။
Socket_set_set_BLOCK တွင် PHP-FPM ပတ်ဝန်းကျင်တွင်ပိတ်ဆို့ခြင်းသည်စွမ်းဆောင်ရည်နှင့်အပြန်အလှန်အကျိုးသက်ရောက်မှုကိုပိတ်ဆို့ခြင်း,
ပိတ်ဆို့ခြင်း mode သည်မြင့်မားသောတစ်ပြိုင်နက်တည်းနှင့်အချိန်မှန်တုန့်ပြန်မှုအခြေအနေများအတွက်မသင့်တော်ပါ။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုအသုံးပြုခြင်းကို ဦး စားပေးရန်အကြံပြုသည် ။
ပိတ်ဆို့ခြင်းကိုအသုံးပြုပါကအချိန်ကုန်ကိုသတ်မှတ်ပြီး PHP-FPM process perool ကိုပြင်ဆင်ရန်သေချာပါစေ။
ရှုပ်ထွေးသောကွန်ယက်ဆက်သွယ်ရေးလိုအပ်ချက်များအတွက်တော့စွမ်းဆောင်ရည်တိုးတက်စေရန်ပြတ်တောင်းပြတ်တောင်းမူဘောင်များသို့မဟုတ်တိုးချဲ့မှုများကိုအသုံးပြုရန်အကြံပြုသည်။
ကွန်ယက် I / O အပြောင်းအလဲလုပ်ခြင်းလုပ်ငန်းစဉ်ကိုပြင်ဆင်ခြင်းအားဖြင့်သာ PHP-FPM ပတ်ဝန်းကျင်တွင် 0 င်ရောက်မှုနှင့်စွမ်းဆောင်ရည်ကိုထည့်သွင်းစဉ်းစားနိုင်ပြီးပိတ်ဆို့ခြင်း၏ဆိုးကျိုးသက်ရောက်မှုများကိုကျွန်ုပ်တို့ရယူနိုင်ပါသည်။
// အထက်ဖော်ပြပါဥပမာဥပမာကုဒ်နှင့်အတူပေါင်းစပ်
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($socket);
socket_connect($socket, "gitbox.net", 80);
$write = [$socket];
$read = null;
$except = null;
if (socket_select($read, $write, $except, 5) > 0) {
socket_write($socket, "GET / HTTP/1.1\r\nHost: gitbox.net\r\n\r\n");
$response = '';
while ($out = socket_read($socket, 2048)) {
$response .= $out;
}
echo $response;
} else {
echo "Socket not ready for writing or timeout.";
}
socket_close($socket);