PHP Network Programming, Socket_set_set_scking () တွင် Socket သည်ပိတ်ဆို့ခြင်းပုံစံဖြင့်ထိန်းချုပ်သည်ကိုထိန်းချုပ်သောသော့ချက်ဖြစ်သည်။ ၎င်း၏အပြုအမူကိုနားလည်ခြင်းနှင့် debugging ကျွမ်းကျင်မှုများကိုကျွမ်းကျင်စွာကျွမ်းကျင်မှုပြုခြင်းသည်တည်ငြိမ်။ ယုံကြည်စိတ်ချရသောကွန်ယက်အက်ပလီကေးရှင်းများဖွံ့ဖြိုးရန်အတွက်အလွန်အရေးကြီးသည်။ ဤဆောင်းပါးသည် Socket_set_set_Set_Locking () ၏ပိတ်ဆို့ခြင်းအပြုအမူကို debug လုပ်ပြီးလက်တွေ့ကျသောအကြံဥာဏ်များနှင့်အသေးစိတ်ခြေလှမ်းများကိုအသေးစိတ်ရှင်းပြပါမည်။
PHP Socket လုပ်ဆောင်ချက်များကိုအသုံးပြုသောအခါပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းအကြားခြားနားချက်မှာ -
Blocking Mode : socket_read () နှင့် socket_accept ()) လုပ်ငန်းဆောင်တာများ () focks () ကိုခေါ်သည့်အခါအချက်အလက်များဖတ်လို့မရလျှင်လုပ်ငန်းစဉ်သည်ချိတ်ဆက်ပါလိမ့်မည်သို့မဟုတ်ဆက်သွယ်မှုတောင်းဆိုမှုတစ်ခုရှိသည်။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode : ဤလုပ်ဆောင်ချက်များကိုခေါ်ဆိုခြင်းသို့မဟုတ်ဆက်သွယ်မှုတောင်းဆိုခြင်းမရှိပါက function ကိုချက်ချင်းပြန်လာလိမ့်မည်, များသောအားဖြင့် မှားယွင်းသောအမှားများကို ပြန်ပို့ခြင်းနှင့် socket_last_Error () ကိုပြန်ပို့ပါ။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'gitbox.net', 80);
// mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
socket_set_blocking($socket, true);
ဤအချိန်တွင်, အကယ်. သင်သည် Socket_read_read () ခေါ်ဆိုမှုကို execute လုပ်လျှင်ဒေတာပြန်ရောက်သည်အထိစောင့်ဆိုင်းလိမ့်မည်။
ပိတ်ဆို့ခြင်းမဟုတ်သောရန်သတ်မှတ်ရန်
socket_set_blocking($socket, false);
ပိတ်ဆို့ခြင်းမဟုတ်သည့်အခါသင်ဖတ်နိုင်သော / NOWNIDE ကိုရှာဖွေရန် Socket_select () ကိုသုံးနိုင်သည်။
$read = [$socket];
$write = $except = null;
$changed = socket_select($read, $write, $except, 5); // ခဏပွဲရပ်ခြင်း 5 စက်ဏန့်
if ($changed > 0) {
$data = socket_read($socket, 1024);
echo "ဒေတာကိုလက်ခံရရှိခဲ့သည်: $data\n";
} else {
echo "等待ခဏပွဲရပ်ခြင်း,未ဒေတာကိုလက်ခံရရှိခဲ့သည်\n";
}
ဤနည်းလမ်းသည်ပိတ်ဆို့ခြင်းအပြုအမူကိုဖျက်သိမ်းရန်လည်းသင့်လျော်သည်။ ပိတ်ဆို့ခြင်း mode မှာ Socket_select () သည် ပိတ်ဆို့ခြင်းသည်မျှော်လင့်ထားသည့်အတိုင်းဆုံးဖြတ်ရန်လည်းဆုံးဖြတ်ရန်ကူညီနိုင်သည်။
အားလုံးအခြေအနေများတွင်မရှိသော်လည်း stream_socket_cletient () သည် အလားတူထိန်းချုပ်မှုနည်းလမ်းများကိုပေးသည်။
$fp = stream_socket_client("tcp://gitbox.net:80", $errno, $errstr, 30);
stream_set_blocking($fp, true);
// သို့မဟုတ်အသုံးပြုပါ stream_set_blocking($fp, false); Non- ပိတ်ဆို့ခြင်းကိုသတ်မှတ်
မတူကွဲပြားသော settings များအောက်တွင်တုန့်ပြန်မှုအပြုအမူကိုနှိုင်းယှဉ်ခြင်းအားဖြင့်ပြ problem နာကိုထိထိရောက်ရောက်တည်ရှိနိုင်သည်။
ပိတ်ဆို့ခြင်းအပြုအမူကို debugging လုပ်တဲ့အခါ, docked server ကချက်ချင်းတုန့်ပြန်လျှင်, ပိတ်ဆို့ခြင်းသည်ယာယီဆာဗာတစ်ခုတည်ဆောက်ခြင်းဖြင့် (Python or Php) ကိုတည်ဆောက်ခြင်းနှင့်နှောင့်နှေးခြင်းများကိုထည့်သွင်းခြင်းအားဖြင့်ထိရောက်ကြောင်းအတည်ပြုနိုင်သည်။
ဥပမာအားဖြင့် server-side code သည်တမင်တကာနှောင့်နှေးသည်။
$client = socket_accept($serverSocket);
sleep(10); // Simulation ပိတ်ဆို့ခြင်း
socket_write($client, "Hello after delay");
client သည်ဤကာလကိုပိတ်ဆို့ခြင်း mode တွင်စောင့်ဆိုင်းသင့်ပြီးပိတ်ဆို့ခြင်းမဟုတ်သောအတွက်ချက်ချင်းပြန်လာပါလိမ့်မည်။
Socket_Last_Error () နှင့် Socket_Stror () ကိုအသုံးပြုခြင်းသည်ပိတ်ဆို့ခြင်းပြ problems နာများကိုပိုမိုရှင်းလင်းစွာနေရာချထားနိုင်သည်။
if ($data === false) {
$error = socket_last_error($socket);
echo "အမှားကုဒ်: $error,ဖေါ်ပြ: " . socket_strerror($error);
}
Eagain , Ewouldblock စသည်တို့စသည့်ပုံမှန်အမှားများစသည်တို့ဖြစ်သည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်ဖတ်ရန်ကြိုးစားသောအခါဖတ်ရန်အချက်အလက်များမရှိပါ။
ပိတ်ဆို့ခြင်းအခြေအနေကိုမှားယွင်းစွာချိန်ညှိခြင်း - ဆက်သွယ်မှုမစတင်မီပိတ်ဆို့ခြင်းသည်ချိတ်ဆက်ခြင်းမရှိသေးပါ။ ဆက်သွယ်မှုပြီးနောက် setting ကဲ့သို့မကောင်းပါ။
Socket_select ၏ thinoutout parameter ကိုပျောက်ဆုံးခြင်း () - default သည် default သည်ပိတ်ဆို့ရန်နှင့်စောင့်ဆိုင်းရန်ဖြစ်သည်။ အကယ်. debugging လုပ်နေစဉ်အတွင်းအချိန်ကုန်မသတ်မှတ်ပါက Socket သည်ကပ်နေကြောင်းမှားယွင်းစွာထင်လိမ့်မည်။
unprocessed return value : ပိတ်ဆို့ခြင်းအပြုအမူကို debugging လုပ်တဲ့အခါပြန်လာတဲ့တန်ဖိုးကိုလျစ်လျူရှုတဲ့အခါ function ကိုပိတ်ဆို့ထားခြင်းရှိမရှိဆုံးဖြတ်ရန်မဖြစ်နိုင်ဘူး။
socket_set_set_blocking () ၏ပိတ်ဆို့ခြင်းအပြုအမူကိုနားလည်ခြင်းနှင့်မှန်ကန်စွာ debugging လုပ်ခြင်းသည် PHP Socket Programming ကိုကျွမ်းကျင်ရန်အရေးကြီးသောအပိုင်းဖြစ်သည်။ ကျိုးကြောင်းဆီလျော်စွာ socket_select ()) , သစ်ထုတ်လုပ်ခြင်းနှင့်ခြင်း simulation စမ်းသပ်မှုများကိုအသုံးပြုပြီးကွန်ယက်ပရိုဂရမ်များ၏ကွပ်မျက်ခြင်းနှင့်တုန့်ပြန်မှုများကိုထိရောက်စွာထိန်းချုပ်နိုင်ပြီးစနစ်၏ကြံ့ခိုင်မှုနှင့်တုန့်ပြန်မှုစွမ်းဆောင်ရည်ကိုပိုမိုထိရောက်စွာထိန်းချုပ်နိုင်သည်။ ဤဆောင်းပါးတွင်ဖော်ပြထားသောသိကောင်းစရာများနှင့်အဆင့်များသည်အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုအတွက်သင်ပိုမိုအသုံးဝင်သည်ကိုကျွန်ုပ်မျှော်လင့်ပါသည်။