PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင်အထူးသဖြင့်ကွန်ယက်ဆက်သွယ်ရေးကိုကိုင်တွယ်သောအခါ Socket_set_sclock function သည်အဓိကအခန်းကဏ် plays မှပါ 0 င်သည်။ Socket များ၏ပိတ်ဆို့ခြင်းအပြုအမူကိုထိန်းချုပ်ရန်အသုံးပြုသည်။ CLI (command line interface) mode ကို debugging လုပ်ရန်အထူးအရေးကြီးသည်။ ဤဆောင်းပါးသည်အကောင်းဆုံးသောလုပ်ထုံးလုပ်နည်းများကို socket_set_set_block ၏အသုံးပြုမှုနှင့် debugging စွမ်းရည်များကိုနက်နက်ရှိုင်းရှိုင်းခွဲခြမ်းစိတ်ဖြာရန်နှင့် debugging စွမ်းရည်များကိုနက်နက်ရှိုင်းရှိုင်းခွဲခြမ်းစိတ်ဖြာရန်နှင့် debuggation programs များကိုပိုမိုထိရောက်စွာကူညီရန်ဘုံပြ problems နာများကိုပြုလုပ်နိုင်သည်။
Socket_set_BLOCK သည် PHP Socket extension ၏လုပ်ဆောင်မှုတစ်ခုဖြစ်ပြီးအဓိကအားဖြင့် socket ကိုပိတ်ဆို့ရန် mode ကိုပိတ်ထားရန်အသုံးပြုသည်။ ပိတ်ဆို့ခြင်း mode တွင် socket ၏ဖတ်ခြင်းနှင့်ရေးခြင်းစစ်ဆင်ရေးသည်ခွဲစိတ်ကုသမှုပြီးဆုံးသည်အထိ (ထိုကဲ့သို့သောအချက်အလက်များ 0 င်ရောက်ခြင်းသို့မဟုတ်ရေးခြင်းစသည့်) ကိုရိုးရှင်းစေသည်အထိစောင့်ဆိုင်းရန်စောင့်ဆိုင်းနေကြသည်။
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, "gitbox.net", 80);
socket_set_block($socket); // mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
?>
မှတ်စု: သက်ဆိုင်ရာ Non-blocking mode function သည် socket_set_nonblock ဖြစ်သည်။
CLI MODE တွင်တိုက်ရိုက် debugging method သည် ECHO (သို့) var_Dump ကို အသုံးပြု. အမှားအယွင်းများကို output လုပ်ခြင်းဆိုင်ရာအချက်အလက်များနှင့်အမှားအယွင်းများနှင့်အမှားအချက်အလက်များကိုကြည့်ရှုရန် Socket_last_Error နှင့် Socket_Strent ကို သုံးရန်ဖြစ်သည်။
<?php
socket_set_block($socket);
$data = @socket_read($socket, 2048);
if ($data === false) {
$errorCode = socket_last_error($socket);
echo "Socket error [$errorCode]: " . socket_strerror($errorCode) . PHP_EOL;
} else {
echo "Received data: " . $data . PHP_EOL;
}
?>
ပိတ်ဆို့ခြင်း mode မှာဒေတာမရှိဘူးဆိုရင် Socket_read က ဒီဟာကိုစောင့်နေလိမ့်မယ်, အဆုံးမဲ့ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်အချိန်ကုန်ရန် twoerect ကို သုံးပါ။
<?php
$read = [$socket];
$write = null;
$except = null;
$timeoutSec = 5;
if (stream_select($read, $write, $except, $timeoutSec) > 0) {
$data = socket_read($socket, 2048);
echo "Data received: $data" . PHP_EOL;
} else {
echo "No data within {$timeoutSec} seconds, timeout." . PHP_EOL;
}
?>
ဤနည်းအားဖြင့်၎င်းသည် debugging စဉ်အတွင်းအချိန်ကုန်သို့မဟုတ် socket error ဟုတ်မဟုတ်ဆုံးဖြတ်နိုင်ပါသည်။
ပြ Proble နာ : Socket_set_set_Block ကိုအသုံးပြုပြီးနောက်မှာဒီပရိုဂရမ်ကို Socket_read (သို့) Socket_write မှာကပ်ထားပြီးတုံ့ပြန်မှုမရှိဘူး။
ဖြေရှင်းချက် -
အချိန်ကုန်ထိန်းချုပ်မှုကိုအကောင်အထည်ဖော်ရန် stream_select နှင့်အတူပေါင်းစပ်။
ရေရှည်ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်ကျိုးကြောင်းဆီလျော်သောအချိန်ကုန်ကိုသတ်မှတ်ပါ။
ဒေတာစီးဆင်းမှုကိုအတည်ပြုရန် debugging စဉ်အတွင်းမှတ်တမ်း output ကိုထည့်ပါ။
ပြနာ - CLI သည်ပုံမှန်အားဖြင့်အလုပ်လုပ်သော်လည်းဝက်ဘ်ပတ်ဝန်းကျင်သို့မဟုတ် daemon တွင်ကွဲပြားခြားနားစွာလုပ်ဆောင်သည်။
ဖြေရှင်းချက် -
PHP configuration သည်ပတ် 0 န်း ကျင်တွင်တသမတ်တည်းဖြစ်ကြောင်းအတည်ပြုပါ။
System ခေါ်ဆိုမှုများကိုခြေရာခံရန်အထောက်အကူပြုရန် အခင်း (Linux) ကဲ့သို့သော command-line debugging tools များကိုသုံးပါ။
ဝက်ဘ်ပတ်ဝန်းကျင်တွင်ထူးခြားသည့်အချိန်ကုန်ကန့်သတ်ချက်များကိုမသုံးပါနှင့်။
ပြနာ : Socket_Connect မအောင်မြင်ပါ,
ဖြေရှင်းချက် -
IP / port မှန်ကန်မှုရှိမရှိစစ်ဆေးပါ။
အမှားအယွင်းများကိုရယူရန် Socket_Last_Error နှင့် Socket_Strer ကို သုံးပါ။
ဆက်သွယ်မှုများကိုစစ်ဆေးရန် Telnet Gitbox.net 80 ကဲ့သို့သော network tools များကိုကိုးကားပါ။
Blocking Mode ၏လိုအပ်ချက်များကိုရှင်းလင်းရန် ဦး စားပေးထားသည် ။ Blocking Mode ကိုစီးပွားရေးလုပ်ငန်းလိုအပ်သည့်အခါသာအသုံးပြုသည်။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode နှင့် event loop ကိုပေါင်းစပ်ခြင်း - Socket_set_nonBlock နှင့် Event-DrivenBlock မူဘောင်ကိုရှုပ်ထွေးသောအခြေအနေများတွင်ပေါင်းစပ်နိုင်သည်။
အမှားကိုင်တွယ်သည့်လုပ်ဆောင်ချက်များကိုအပြည့်အဝအသုံးချပါ ။
သစ်ထုတ်လုပ်ခြင်း - CLI ပတ်ဝန်းကျင်တွင်အသေးစိတ်မှတ်တမ်းသည်တိုက်ရိုက်နှင့်ထိရောက်သော debugging နည်းလမ်းဖြစ်သည်။
အစစ်အမှန်ပတ်ဝန်းကျင်စမ်းသပ်ခြင်းကိုတုူကူးခြင်း - packet transmation status ကိုလေ့လာရန် Network Packet Capture tools (Wireshark) ကိုသုံးပါ။