PHP Network Programming တွင် Socket_set_set_sck () function ကို socket to mode ကို socket to mode ကိုသတ်မှတ်ရန်အသုံးပြုသည်။ သို့သော် PHP ဗားရှင်း၏အသစ်ပြောင်းခြင်းနှင့်အတူဤလုပ်ဆောင်မှု၏အပြုအမူနှင့်ထောက်ခံမှုသည်နည်းနည်းပြောင်းလဲသွားပြီး developer များနှင့်လိုက်လျောညီထွေဖြစ်အောင်စိန်ခေါ်မှုများကိုဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည် socket_set_set_block () ကွဲပြားခြားနားသော PHP ဗားရှင်းများတွင်ကွဲပြားခြားနားသော PHP ဗားရှင်းများတွင်အသေးစိတ်ခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။
Socket_set_block () သည် PHP ၏ Sockets Extension မှပေးသော function တစ်ခုဖြစ်သည်။ Blocking Mode ဆိုသည်မှာဒေတာများကိုဖတ်ရှုခြင်းသို့မဟုတ်ရေးသားသည့်အခါ,
function ကိုအဓိပ္ပါယ်ပုံဥပမာ:
bool socket_set_block(resource $socket)
အောင်မြင်မှုအပေါ် စစ်မှန်တဲ့ အောင်မြင်မှုနှင့်ပျက်ကွက်အပေါ် မှားယွင်းသော အပေါ်ပြန်လည်ရောက်ရှိ။
PHP 5.x ဗားရှင်းတွင် socket_set_set_block () function ကိုတည်ရှိပြီးပုံမှန်လုပ်ဆောင်ချက်များရှိသည်။ ပိတ်ဆို့ခြင်းအခြေအနေကိုရိုက်ထည့်ရန် Socket ကိုတိုက်ရိုက်ခေါ်ဆိုနိုင်သည်။
နမူနာကုဒ်:
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'gitbox.net', 80);
socket_set_block($socket);
// နောက်ဆက်တွဲဖတ်ရန်သို့မဟုတ်စစ်ဆင်ရေးရေးရန်
?>
PHP 7 မှစတင်. တရားဝင်စာရွက်စာတမ်းများသည် Socket_set_set_Stock () သည် အချို့သောစနစ်များသို့မဟုတ် PHP ဗားရှင်းများအပေါ်ကိုက်ညီမှုမရှိသောကြောင့်အခြားစာရွက်စာတမ်းများကိုအကြံပြုသည်။ တရားဝင်ပိတ်ဆို့ခြင်း (သို့) ပိတ်ဆို့ခြင်းမပြုရန် Socket_set_Set_option () ကို အသုံးပြုသည်။
ဥပမာအားဖြင့်, ပိတ်ဆို့ခြင်း mode ကိုအောက်ပါနည်းလမ်းများဖြင့်အကောင်အထည်ဖော်နိုင်ပါသည်:
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec'=>0, 'usec'=>0]);
သို့မဟုတ် local_set_set_nonblock () ကိုယုတ္တိစာဖြင့်ပေါင်းစပ်ရန်တိုက်ရိုက်အသုံးပြုပါ။
မှတ်ချက် - တရားဝင် PHP စာရွက်စာတမ်းများသည် socket_set_set_block () အချို့ဗားရှင်း 7.x တွင်ကန့်သတ်ထားသည်။
Windows ပတ်ဝန်းကျင်သည် Socket_set_scoCk () ကို အတော်လေးကောင်းကောင်းထောက်ပံ့သည်။
Linux နှင့် MacoS တွင်အထူးသဖြင့် PHP ဗားရှင်းအသစ်များအတွက် Socket_set_set_option () ကို အသုံးပြုရန်အကြံပြုသည်။
PHP ဗားရှင်းကိုစစ်ဆေးခြင်းနှင့် Socket_set_sblock () function ကိုထောက်ပံ့ခြင်းရှိမရှိနှင့်သက်ဆိုင်သောနည်းလမ်းကိုရွေးချယ်ပါ။
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'gitbox.net', 80);
if (function_exists('socket_set_block')) {
socket_set_block($socket);
} else {
// အသုံးပြု socket_set_option ပိတ်ဆို့ခြင်းတုပရန်
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec'=>0, 'usec'=>0]);
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ['sec'=>0, 'usec'=>0]);
}
?>
မျက်မှောက်ခေတ်ပိတ်ဆို့ခြင်းမဟုတ်သော sockets များကိုအသုံးပြုရန်ခေတ်မီပြတ်သားသောသို့မဟုတ်ဖြစ်ရပ်မောင်းနှင်သည့်ပရိုဂရမ်များကို ရွေးချယ်ရန် အကြံပြုသည်။
<?php
socket_set_nonblock($socket);
// အသုံးပြု socket_select ဖြစ်ရပ်နားထောင်ခြင်းနှင့်ဒေတာဖတ်ရှုခြင်းလုပ်ဆောင်ပါ
$read = [$socket];
$write = $except = null;
if (socket_select($read, $write, $except, 0, 200000)) {
$data = socket_read($socket, 2048);
// အချက်အလက်များကိုထုတ်ယူခြင်း
}
?>
ဤဖြေရှင်းချက်သည်ဗားရှင်းများစွာနှင့်ပိုမိုသဟဇာတဖြစ်ပြီးအစီအစဉ်ပြောင်းလွယ်ပြင်လွယ်တိုးတက်လာသည်။
Socket_set_block () ကို PHP 5.x တွင်ပိုမိုကောင်းမွန်သောပံ့ပိုးမှုဖြစ်သော်လည်း PHP 7.x နှင့်နောက်ပိုင်းဗားရှင်းများတွင်၎င်းကိုသတိပြုရန်အကြံပြုသည်။
PHP ဗားရှင်းနှင့်ပတ်ဝန်းကျင်နှင့်အညီအစားထိုးရန် Socket_set_set_option () သို့မဟုတ်ပိတ်ဆို့ခြင်း + ဖြစ်ရပ် loop method ကိုအသုံးပြုရန်အကြံပြုသည်။
Cross-version practry programs များကိုရေးသည့်အခါ, မတည်ရှိနိုင်သည့်လုပ်ဆောင်မှုများကိုတိုက်ရိုက်ခေါ်ဆိုမှုများကိုရှောင်ရှားရန်ဗားရှင်းတရားစီရင်ခြင်းနှင့်စစ်ဆေးခြင်းကိုထည့်ရန်အကောင်းဆုံးဖြစ်သည်။
အထက်ပါနည်းလမ်းများမှတစ်ဆင့် Socket_set_set_Stock () function ၏သဟဇာတဖြစ်သော Socket_set_Sblock () function ကိုထိရောက်စွာကိုင်တွယ်ဖြေရှင်းနိုင်ခြင်းနှင့်ထိရောက်စွာကိုင်တွယ်နိုင်ပြီးကွန်ယက်ပရိုဂရမ်ကိုတည်ငြိမ်စွာပြေးရန်သေချာစေရန်သေချာစေနိုင်သည်။