PHP Network Programming တွင်ပိတ်ဆို့ခြင်းမဟုတ်သော Socketets များသည်ပရိုဂရမ်တုန့်ပြန်မှုမြန်နှုန်းနှင့်တစ်ပြိုင်နက်တည်းတိုးတက်စေရန်အသုံးပြုကြသည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket socket socket လုပ်ခြင်းအားဖြင့်အချက်အလက်များကိုစောင့်ဆိုင်းခြင်းကြောင့်အစီအစဉ်ကိုပိတ်ပင်တားဆီးမှုမရှိပါ။ သို့သော်ပိတ်ဆို့ခြင်းမဟုတ်သောပုံစံများလည်းအပိုဆောင်းရှုပ်ထွေးမှုများကိုယူဆောင်လာပြီးအထူးသဖြင့်အရေးပါသောအမှားများကိုကိုင်တွယ်ခြင်းဖြင့်လည်းပိုမိုရှုပ်ထွေးစေသည်။ ဤဆောင်းပါးသည် socket_clear_Error () function ကိုပိတ်ဆို့ခြင်းမဟုတ်သော sockets များကိုမည်သို့မှန်ကန်စွာအသုံးပြုရမည်ကိုအာရုံစိုက်မည်။
Socket_Close_Error () သည် Socket ပေါ်တွင်ဖြစ်ပွားခဲ့သောအမှားများကိုရှင်းလင်းစေသည့် PHP တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်မကြာခဏဆိုသလိုအမှားအယွင်းများနှင့်အမှားအယွင်းများတွင်ပြန်လည်ပြုပြင်ခြင်းအခြေအနေများတွင်အသုံးပြုသည်။
ပိတ်ဆို့ခြင်း non-blocking non-socket သည်ခွဲစိတ်ကုသမှုတစ်ခုပြုလုပ်သောအခါလက်ရှိရရှိနိုင်သည့်အချက်အလက်များသို့မဟုတ်အရင်းအမြစ်မရရှိပါကစောင့်ဆိုင်းမည့်အစားချက်ချင်းပြန်လာလိမ့်မည်။ ဤအပြုအမူသည် Eagain သို့မဟုတ် ewouldblock ကဲ့သို့သော "အမှား" ကဲ့သို့သော "အမှား" အချို့ကိုမကြာခဏဖြစ်ပေါ်စေသည်။ ဤကိစ္စတွင်အမှားတစ်ခုကိုတိုက်ရိုက်အစီရင်ခံခြင်းသို့မဟုတ်ဆက်သွယ်မှုကိုပိတ်ရန်သင်တိုက်ရိုက်အစီရင်ခံခြင်းမပြုသင့်ပါ။
ပြုပြင်ထားသောအမှားများကိုရှင်းလင်းပါ Socket Error Code ကိုရှာဖွေတွေ့ရှိပါကအမှားကိုမှန်ကန်စွာပြုပြင်ပြီးပြီဟုဆုံးဖြတ်ပါက (ဥပမာအားဖြင့် EAGAIN ကို ပြန်လည်ပြုပြင်ရန်နှင့်စောင့်ဆိုင်းခြင်း) သည်နောက်ဆက်တွဲ အမှားများကိုနောက်ဆက်တွဲအမှားများကိုရှောင်ရှားရန်အမှားအယွင်းများကိုပြန်လည်စတင်ရန်တောင်းဆိုသင့်သည်။
အမှားအယွင်းမရှိဘဲခေါ်ဆိုခြင်းမပြုပါနှင့် socket_clear_Error_Error () ကို မကြာခဏခေါ်ဆိုရန်မလိုအပ်ပါ။ သို့မဟုတ်ပါကအမှားအယွင်းများကိုဖုံးကွယ်ထားရန်အကြံပြုခြင်းမဟုတ်ပါ။
Socket_last_Error () <br> အများအားဖြင့် Socket_last_Error () သည် socket ၏အမှားအယွင်းကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။ Socket_Close_Error () အမှားတစ်ခုရှိလျှင်သာဟုခေါ်သည်။
<?php
// ပိတ်ဆို့ခြင်းမဟုတ်သောဖန်တီးပါ Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($socket);
// ဆာဗာကိုဆက်သွယ်ပါ
socket_connect($socket, 'm66.net', 80);
// Non-blocking ဒေတာပေးပို့ခြင်း
$data = "GET / HTTP/1.1\r\nHost: m66.net\r\nConnection: Close\r\n\r\n";
$bytesSent = socket_write($socket, $data);
if ($bytesSent === false) {
$errCode = socket_last_error($socket);
if ($errCode == SOCKET_EAGAIN || $errCode == SOCKET_EWOULDBLOCK) {
// အရင်းအမြစ်များကိုယာယီမရနိုင်ပါ,နောက်မှထပ်ကြိုးစားပါ
echo "Write would block, try again later.\n";
} else {
// အခြားအမှားများ,output အမှားအယွင်းနှင့်ရှင်းလင်းသောအမှားအယွင်း
echo "Socket write error: " . socket_strerror($errCode) . "\n";
socket_clear_error($socket);
}
}
// တုံ့ပြန်မှုကိုဖတ်ပါ
while (true) {
$buffer = socket_read($socket, 2048);
if ($buffer === false) {
$errCode = socket_last_error($socket);
if ($errCode == SOCKET_EAGAIN || $errCode == SOCKET_EWOULDBLOCK) {
// ဒေတာကိုယာယီမရနိုင်ပါ,စောင့်ဆိုင်းနေပါ
usleep(100000); // 100ms
continue;
} else {
echo "Socket read error: " . socket_strerror($errCode) . "\n";
socket_clear_error($socket);
break;
}
} elseif ($buffer === '') {
// ဆက်သွယ်မှုပိတ်
break;
} else {
echo $buffer;
}
}
socket_close($socket);
?>
ကွဲပြားခြားနားမှုအမှားအယွင်းများ - ပိတ်ဆို့ခြင်းမဟုတ်သောအသုံးမပြုသည့်နည်းလမ်းများတွင် EAGAOVOLC သို့မဟုတ် EWOOLDBLOCK အမှားများသည်ပုံမှန်ဖြစ်သည်။
အမှားအယွင်းများကိုမကြာခဏရှင်းလင်းစွာရှောင်ကြဉ်ပါ ။ ၎င်းသည်အမှားအယွင်းများကိုမှန်ကန်စွာကိုင်တွယ်နိုင်ကြောင်းအတည်ပြုပြီးနောက်အမှားအယွင်းကိုသာရှင်းလင်းသင့်သည်။
status ကိုစောင့်ကြည့်ရန်အခြားလုပ်ဆောင်ချက်များနှင့်ပေါင်းစပ်ထားသည် ။ ဥပမာအားဖြင့် socket_last_Error () ကို socket_clast_error () ကို ပိုမိုလုံခြုံစွာစီမံရန်အသုံးပြုသည်။
အချိန်ကိုလက်ကိုင်ကိုင်ပြီးယုတ္တိဗေဒကိုကောင်းစွာကြိုးစားပါ ။ ပိတ်ဆို့ခြင်းမဟုတ်သောစစ်ဆင်ရေးများသည်မဲရုံများသို့မဟုတ်အဖြစ်အပျက်များနှင့်အကြိမ်အရေအတွက်ကိုကျိုးကြောင်းဆီလျော်စွာဒီဇိုင်းဆွဲရန်အတွက်ပါ 0 င်ခြင်းသို့မဟုတ်ဖြစ်ရပ်ယန္တရားများနှင့်ပူးပေါင်းဆောင်ရွက်ရန်လိုအပ်သည်။