Network Programming အတွက် PHP အတွက် PHP ကိုအသုံးပြုသောအခါ socket_set_set_block () function ကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော် PHP ကိုယ်တိုင်က PHP ကိုယ်တိုင်က Cross-platform တစ်ခုဖြစ်သော်လည်းအခြေခံစနစ်ခေါ်ဆိုမှုများနှင့်အပြုအမူသည် operating system အကောင်အထည်ဖော်မှုအပေါ်တွင်မူတည်သည် ။ ဤဆောင်းပါးတွင်ဤကွဲပြားခြားနားမှုများကိုနက်ရှိုင်းစွာလေ့လာပြီးအမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အာရုံစိုက်သင့်သည့်အဓိကအချက်များကိုထောက်ပြပါမည်။
Socket_set_block (Resource $ socket): Bool
ဒီ function ကို blocking mode ကို socket ကိုသတ်မှတ်ရန်အသုံးပြုသည်။ ပိတ်ဆို့ခြင်း mode တွင် socket_read () သို့မဟုတ် socket_accept_Ack_acception ()) ဖိုင်များကိုခေါ်ဆိုခြင်းသို့မဟုတ်ဆက်သွယ်မှုကိုမဖတ်နိုင်သောသို့မဟုတ်ဆက်သွယ်မှုကိုလက်ခံနိုင်ဖွယ်ရှိပါကခေါ်ဆိုမှုသည်ဆက်လက်လုပ်ဆောင်နိုင်သည့်အထိခေါ်ဆိုမှုသည် (ပိတ်ဆို့ခြင်း) ဆွဲထားလိမ့်မည်။
ဤသည် socket_set_nonblock () နှင့်ဆန့်ကျင်ဘက်ဖြစ်ပါသည်, ဒီစစ်ဆင်ရေးကိုပိတ်ဆို့ခြင်း (ချက်ချင်းပြန်လာ)
Windows : Socketets သည်ပုံမှန်အားဖြင့် mode ကိုပိတ်ဆို့နေသည်။
Linux : အလားတူပင်,
၎င်းသည်ပလက်ဖောင်းနှစ်ခုလုံးတွင်တသမတ်တည်းဖြစ်သော်လည်းအချို့သောကိစ္စရပ်များတွင် Linux ရှိ Sockets များကိုလက်လိုစိတ်ပိတ်ခြင်းကိုလုံးလုံးလျားလျားသတ်မှတ်ထားခြင်း (ဥပမာစာကြည့်တိုက်များဝန်းကျင်တွင်) ။ ထို့ကြောင့်၎င်းသည် cross-platform ဖွံ့ဖြိုးတိုးတက်မှုအတွက် socket_set_sblock () ကို အတိအလင်းခေါ်ဆိုရန်အတော်အတန်လုံခြုံစိတ်ချရသောအလေ့အကျင့်တစ်ခုဖြစ်သည်။
ပိတ်ဆို့ခြင်း mode တွင်ကွဲပြားခြားနားသောပလက်ဖောင်းများသည်မည်သည့်အချိန်တွင် "ပြန်လာ" မည်ဆိုလျှင်အနည်းငယ်ကွဲပြားသောတရားစီရင်ပိုင်ခွင့်ရှိနိုင်သည်။ ဥပမာအားဖြင့်:
Windows, Socket_read () တွင် TCP ဆက်သွယ်မှုအဆက်ပြတ်သည့်အခါ TCP ဆက်သွယ်မှုပြတ်တောက်သွားသောအခါကြားခံကိုရှင်းပစ်ရန်စောင့်ဆိုင်းနေဆဲဖြစ်သည်။
Linux တွင်အဆက်ဖြတ်ခြင်းကများသောအားဖြင့် မှားယွင်းသော နောက်သို့ပြန်ပို့ရန် socket_read () ကို အစပျိုးသည်။
၎င်းသည် developer များက developer များကပြတင်းပေါက်များရှိယုတ္တိဗေဒအပိုင်းအစတစ်ခုကိုစမ်းသပ်ရန်ဖြစ်ပေါ်စေနိုင်သည်။
PHP သည်စည်းလုံးညီညွတ်သော interface ကိုထောက်ပံ့သော်လည်းအခြေခံခေါ်ဆိုမှုသည် operating system ၏ API ဖြစ်သည်။
Linux တွင် Socket_set_set_block () သည် FCNTL () မှတဆင့် O_NOCBLOCK အလံကိုအမှန်တကယ်သတ်မှတ်သည်။
Windows, ioctlsocket () fionbio အလံ bit ကိုထိန်းချုပ်ရန်ဟုခေါ်သည်။
ဆိုလိုသည်မှာအမှားကုဒ်နှင့်အမှားများသည်ပလက်ဖောင်းနှစ်ခုတွင်ကွဲပြားခြားနားသည်ဟုဆိုလိုသည်။ Developer များက sociec_last_Error () ကို အသုံးပြု. သတ်သတ်မှတ်မှတ်အမှားများရရန်နှင့် Socket_Stror () မှတဆင့်လူ့ဖတ်နိုင်သောအမှားအချက်အလက်များကိုရယူရန်အသုံးပြုသင့်သည်။
နမူနာကုဒ်:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
die("socket_create failed: " . socket_strerror(socket_last_error()));
}
// mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
if (!socket_set_block($socket)) {
die("Failed to set blocking mode: " . socket_strerror(socket_last_error($socket)));
}
// ဝေးလံသောအိမ်ရှင်နှင့်ဆက်သွယ်ပါ
if (!socket_connect($socket, 'gitbox.net', 80)) {
die("socket_connect() failed: " . socket_strerror(socket_last_error($socket)));
}
$request = "GET / HTTP/1.1\r\nHost: gitbox.net\r\nConnection: Close\r\n\r\n";
socket_write($socket, $request, strlen($request));
$response = '';
while ($out = socket_read($socket, 2048)) {
$response .= $out;
}
echo $response;
socket_close($socket);
display setting mode ကို <br> ပုံမှန်အပြုအမူအပေါ်မှီခိုခြင်းမရှိပါ, အမြဲတမ်းပလက်ဖောင်းရှေ့ဆက်ထားရှိမည်။
ချို့တဲ့ကိုင်တွယ်ဖြေရှင်းအမှား ပြတ်တောက်စေသောယုတ္တိဗေဒကိုရေးသောအခါ, တိကျသောပလက်ဖောင်းများ၏အမှားကုဒ်များကိုမမှီခိုပါနှင့်။ စီရင်ချက်ချရန် socket_strorror () မှပေးသောသတင်းအချက်အလက်များကိုအသုံးပြုရန်ကြိုးစားပါ။
စမ်းသပ်ခြင်းဆိုင်ရာရှေ့နောက်ညီညွတ်မှု <br> ဒေသခံစစ်ဆေးနေစဉ်အတွင်း (WSL2 ကဲ့သို့သော WSL2 ကဲ့သို့သော 0 ံပုဂံကဲ့သို့သော) ကိုအသုံးပြုသောပတ် 0 န်းကျင် (ထိုကဲ့သို့သော WSL2 ကဲ့သို့) သည်ဖြစ်နိုင်ချေရှိသောအပြုအမူဆိုင်ရာကွဲပြားခြားနားမှုများကိုရှာဖွေရန်တတ်နိုင်သမျှပစ်မှတ်ထားသောနေရာနှင့်နီးစပ်ကြောင်းသေချာစေပါ။
အချိန်ကုန်ထိန်းချုပ်မှုအကြံပြုချက်များ <br> <br> ပိတ်ဆို့ခြင်း mode မှာ operating socketets operating sockets ကိုအလွယ်တကူရှင်းရှင်းလင်းလင်းသို့မဟုတ် lags ဖြစ်ပေါ်စေနိုင်ပါတယ်။ ကျိုးကြောင်းဆီလျော်သောအချိန်ကုန်ကို socket_set_option ()) နှင့် stream_socient_client () နှင့်အခြား encapsultient () နှင့်အခြား encapsultulation လုပ်ငန်းများကို အသုံးပြု. thinoutout ကိုထောက်ပံ့သော factemsockultion function များကို socket_sockult_sockult_sockultion) နှင့်အသုံးပြုသည်။
PHP သည်ကျွန်ုပ်တို့အတွက်စနစ်၏အခြေခံအကျဆုံးရှုပ်ထွေးမှုအများစုကိုပိတ်ဆို့ထားသော်လည်း Network Programming တွင် system platform ကွဲပြားခြားနားမှုများကိုအာရုံစိုက်ရန်လိုအပ်သည်။ Socket_set_Set_BLOCK () function သည်ရိုးရှင်းသော်လည်း Windows နှင့် Linux Systems တွင်စွမ်းဆောင်ရည်ကွာခြားမှုသည်အစီအစဉ်၏တည်ငြိမ်မှုနှင့်သယ်ဆောင်နိုင်မှုကိုအကျိုးသက်ရောက်နိုင်သည်။ အပြုအမူနှင့်စေ့စပ်စမ်းသပ်ခြင်းသည်အစီအစဉ်မှာပရိုဂရမ်ချောချောမွေ့မွေ့လည်ပတ်ရန်သေချာစေရန်သော့ချက်ဖြစ်သည်။