လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_set_sc.block ၏သက်ရောက်မှုကို PHP-FPM ပတ်ဝန်းကျင်တွင်

Socket_set_sc.block ၏သက်ရောက်မှုကို PHP-FPM ပတ်ဝန်းကျင်တွင်

gitbox 2025-05-26

1 ။ socket_set_sc.block function ကိုနိဒါန်း

Socket_set_block သည် PHP တွင် function တစ်ခုဖြစ်သည်။ ပိတ်ဆို့ခြင်း mode ကိုဆိုသည်မှာ Socket ၏ဖတ်ခြင်းနှင့်ရေးခြင်းစစ်ဆင်ရေးများသည်မထွက်ခွာမီပြီးစီးရန်ဒေတာများကိုစောင့်ဆိုင်းမည်ဟုဆိုလိုသည်။

function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 bool socket_set_block ( resource $socket )

ခေါ်ဆိုမှုသည်အောင်မြင်မှုအတွက် စစ်မှန် ပြီးပျက်ကွက်ပြီးနောက် မှားယွင်းသော အရာဖြစ်သည်။


2 ။ PHP-FPM ပတ်ဝန်းကျင်၏အထူးအင်္ဂါရပ်များ

PHP-FPM (Fasticgi Process Manager Manager) သည် PHP ၏လုပ်ငန်းစဉ်စီမံခန့်ခွဲမှုလုပ်ငန်းစဉ်စီမံခန့်ခွဲမှုဖြစ်စဉ်တစ်ခုဖြစ်သည်။ PHP-FPM ၏လုပ်ငန်းယန္တရားသည်ကလေးသူငယ်များအားတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ရန်ဖြစ်သည်, တောင်းဆိုမှုတစ်ခုစီသည်လွတ်လပ်စွာပြေးလွှားနိုင်ပြီး,

ဤ Multi-process model သည်ပိတ်ဆို့ခြင်းလုပ်ငန်းများပိတ်ဆို့ခြင်းအတွက်သည်းခံခြင်းအကန့်အသတ်ဖြင့်အကန့်အသတ်ဖြင့်အကန့်အသတ်ရှိသည်။


3 ။ Socket_set_sblock ၏သက်ရောက်မှုကို PHP-FPM ပတ်ဝန်းကျင်တွင်ခွဲခြမ်းစိတ်ဖြာခြင်း

1 ။ ပိတ်ဆို့ခြင်းဖြစ်စဉ်ကိုပိတ်ဆို့ခြင်း

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 တွင်တောင်းဆိုမှုများသည်တစ်ချိန်တည်းတွင်အလားတူပိတ်ဆို့မှုများပြုလုပ်နေပါက၎င်းသည်လုပ်ငန်းစဉ်ရေကန်တွင်တင်းတင်းကျပ်ကျပ်အရင်းအမြစ်များကိုဖြစ်ပေါ်စေနိုင်သည်။

2 ။ တစ်ပြိုင်နက်တည်းစွမ်းဆောင်ရည်ကိုလျှော့ချပါ

စစ်ဆင်ရေးပိတ်ဆို့ခြင်းဆိုသည်မှာလုပ်ငန်းစဉ်သည်အချက်အလက်များကိုစောင့်ဆိုင်းနေစဉ်ဖြစ်စဉ်တစ်ခုသည်အခြားအလုပ်များကိုမလုပ်ဆောင်နိုင်ဟုဆိုလိုသည်။ PHP-FPM ရှိလုပ်ငန်းစဉ်အရေအတွက်မှာအကန့်အသတ်ရှိသည်။ ၎င်းသည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုတိုက်ရိုက်ကန့်သတ်ထားသည်။ အထူးသဖြင့်မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ် 0 န်းကျင်တွင်ပိတ်ဆို့ခြင်း mode သည်စွမ်းဆောင်ရည်ကောင်းမွန်အောင်လုပ်ရန်အထောက်အကူပြုခြင်းမရှိပါ။

3 ။ အချိန်ကုန်ထိန်းချုပ်မှုသည်ပိုမိုရှုပ်ထွေးသည်

PHP-FPM ကိုယ်တိုင်ကတောင်းဆိုချက်အချိန်သတ်မှတ်ခြင်းကိုထောက်ခံသည်။


4 ။ လက်တွေ့လမ်းညွှန်မှု - Socket_set_sc.block ကို PHP-FPM ပတ်ဝန်းကျင်တွင်မည်သို့အသုံးပြုရမည်နည်း

1 ။ ပိတ်ဆို့ခြင်းမဟုတ်သော modes ကို ဦး စားပေး

ပိတ်ဆို့ခြင်း 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");
}

2 ။ ကျိုးကြောင်းဆီလျော်သောအချိန်ကုန်ကိရိယာယန္တရားကိုသတ်မှတ်ပါ

အကယ်. သင်သည်ပိတ်ဆို့ခြင်း 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);

3 ။ PHP-FPM process process pool ၏စွမ်းရည်ကိုတိုးမြှင့်ပါ

PM.Max_children ကို configure လုပ်ခြင်းအရ, ရေတိုပိတ်ဆို့ခြင်းကိုကိုင်တွယ်ရန်လုပ်ငန်းစဉ်များအလုံအလောက်ရှိရန်သေချာစေရန်လိုအပ်သည့်အတွက်လုပ်ငန်းစဉ်များအလုံအလောက်ရှိရန်သေချာစေရန်အတွက်၎င်းသည်ကယ်ဆယ်ရေးအစီအစဉ်နှင့်မှီခိုမှုများကိုမထောက်ခံပါ။

4 ။ asynchronous မူဘောင်သို့မဟုတ်တိုးချဲ့နှင့်အတူပေါင်းစပ်

မြင့်မားသောစွမ်းဆောင်ရည်လိုအပ်ချက်များအတွက်, allynchronous liblnchronous libraries (ဥပမာ Reflephp ) သို့မဟုတ် swoole extensions များအတွက်အသုံးပြုရန်အကြံပြုသည်။ ဤဖြေရှင်းချက်များသည် PHP-FPM အပြင်ဘက်တွင်ပိုမိုကျယ်ပြန့်သောဆက်သွယ်မှုများနှင့်ပြတ်တောင်းချက်များနှင့်ပြတ်တောင်းပြတ်တောင်းဖြန့်ချိမှုများအတွက်ပိုမိုသင့်တော်သည်။


5 ။ အကျဉ်းချုပ်

  • 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);