လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အဘယ်ကြောင့် socket_accept () မတုံ့ပြန်ဘာဖြစ်သလဲ? ဒီ configurations ကိုစစ်ဆေးပါ

အဘယ်ကြောင့် socket_accept () မတုံ့ပြန်ဘာဖြစ်သလဲ? ဒီ configurations ကိုစစ်ဆေးပါ

M66 2025-05-24

ပုံမှန်အားဖြင့် PHP scription untion time သည်အကန့်အသတ်ရှိသည်။ ဤအကန့်အသတ်ဖြင့် script သည်အကန့်အသတ်ဖြင့်အလုပ်လုပ်ပါက PHP သည် script execution ကိုအလိုအလျောက်ရပ်စဲလိမ့်မည်။ ရေရှည် socket 0 န်ဆောင်မှုများအတွက် Maxecution_time_time configuration သည် connection ကိုစောင့်ဆိုင်းနေစဉ် PHP သည်အကန့်အသတ်ဖြင့်ကန့်သတ်ချက်ကိုကန့်သတ်ချက်သို့ရောက်စေခြင်းအတွက် Socket_acception () function ကိုဖြစ်စေနိုင်သည်။

ဖြေရှင်းချက် -

PHP configuration file file php configuration_time file ၏တန်ဖိုးကိုထည့်သွင်းခြင်းအားဖြင့်ကွပ်မျက်ချိန် ကို code တွင်အသုံးပြုသည်။ ဥပမာအားဖြင့်:

 set_time_limit(0); // ကွပ်မျက်အချိန်အပေါ်အဘယ်သူမျှမကန့်သတ်

2 ။ firewall နှင့် network configuration ကိုစစ်ဆေးပါ

ဆာဗာနှင့် 0 န်ဆောင်မှုခံယူသူနှင့် 0 န်ဆောင်မှုခံယူသူအားကွန်ယက်ချိတ်ဆက်မှုသည် Firewall မှ ကန့် သတ်ထားပါက client's connection တောင်းဆိုမှုကိုလက်ခံရရှိမည်မဟုတ်ပါ။ Firewall သည်တိကျသော port တစ်ခုသို့ 0 င်ရောက်နိုင်ပြီး socket connection ကိုမထူထောင်နိုင်ပါ။

ဖြေရှင်းချက် -

  • PHP scripts များကိုနားထောင်ပေးသော Ports များသည် Firewall Configuration တွင်ဝင်ရောက်ခွင့်ပြုသည်ကိုသေချာစေပါ။

  • ဆာဗာဆိပ်ကမ်းကိုဖွင့်သည်ကို Telnet သို့မဟုတ် NC ကဲ့သို့သောကိရိယာများကိုသုံးပါ။

 telnet yourserver.m66.net 12345

ဆက်သွယ်မှုသည်မအောင်မြင်ပါက firewall configuration ကိုစစ်ဆေးရန်နှင့်ဆိပ်ကမ်းကိုမှန်ကန်စွာဖွင့်ရန်သေချာစေရန်လိုအပ်သည်။

3 ။ ဆာဗာသည်မှန်ကန်သောလိပ်စာနှင့် port ကိုနားထောင်ပေးပါ

PHP ၏ Socket_Accept_Accept () လုပ်ကွက်များ () function blocks များသည် client ကိုဆက်သွယ်မှုတစ်ခုမတည်မချင်း။ အကယ်. ဆာဗာသည်သတ်မှတ်ထားသောလိပ်စာသို့မဟုတ် port သို့မဟုတ် port ကိုစနစ်တကျမ 0 င်ပါက Socket_accept () သည် တုံ့ပြန်မည်မဟုတ်ပါ။

ဖြေရှင်းချက် -

ဆာဗာဘက်မှ binding address နှင့် port သည်မှန်ကန်သည်ကိုစစ်ဆေးပါ။ Socket_bind () တွင် 0 င်ရောက်သောအိုင်ပီလိပ်စာနှင့်ဆိပ်ကမ်းများသည်တရားဝင်ဖြစ်ကြောင်းသေချာပါစေ။ ဥပမာအားဖြင့်:

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 12345); // အားလုံးနားထောင်ပါ IP စကားပေြာဟော 12345 သငေ်္ဘာဆိပ်ကမ်း
socket_listen($socket);

4 ။ client connection တောင်းဆိုမှုသည်ပုံမှန်ဖြစ်သည်ကိုစစ်ဆေးပါ

တစ်ခါတစ်ရံတွင် client သည် ဆက်သွယ်မှုတောင်းဆိုမှုကိုမှန်ကန်စွာစတင်ရန်ပျက်ကွက်ခြင်း, ၎င်းသည် 0 န်ဆောင်မှုခံယူသူမှမမှန်ကန်သောလိပ်စာသို့မဟုတ် port များကြောင့်ဖြစ်နိုင်သည်, သို့မဟုတ် client သည် connection တောင်းဆိုမှုကိုမပို့ပါ။

ဖြေရှင်းချက် -

client သည် socient_ connonnect () function ကိုမှန်ကန်စွာအသုံးပြုကြောင်းသေချာအောင်လုပ်ပါ။ ဥပမာအားဖြင့်:

 $client_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($client_socket, 'yourserver.m66.net', 12345);

5 ။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသုံးပါ

ပုံမှန်အားဖြင့် socket_accept () သည်ပိတ်ဆို့ခြင်းပိတ်ဆို့ခြင်း, i.e. client connection ရှိသည်အထိစောင့်ဆိုင်းလိမ့်မည်။ သင်ပိတ်ဆို့ခြင်းကိုရှောင်ရှားလိုပါက socket ကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode သို့ socket ကိုသတ်မှတ်နိုင်သည်။

ဖြေရှင်းချက် -

socket_set_set_nonblock () ကို အသုံးပြု. ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသတ်မှတ်ရန်

 socket_set_nonblock($socket);

ဤနည်းအားဖြင့် Socket_Accept () သည် ဆက်သွယ်မှုမရှိဘဲအချိန်ကြာမြင့်စွာပိတ်ဆို့လိမ့်မည်မဟုတ်ပါ, သို့သော်ချက်ချင်းပြန်လာလိမ့်မည်။

6 ။ operating system ၏ file descriptor ကန့်သတ်ချက်များကိုစစ်ဆေးပါ

operating system သည်များသောအားဖြင့်လုပ်ငန်းစဉ်တစ်ခုဖွင့်နိုင်သည်။ သင်၏ဆာဗာသည် connection processing နှင့် operating system တွင်တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုများစွာရှိပါက descriptor limit_acception () socket_acception () ကိုအနိမ့်ကျသော socket_accept () ကိုအကျိုးသက်ရောက်စေနိုင်သည်။

ဖြေရှင်းချက် -

operating system ရဲ့ descriptor ကန့်သတ်ချက်တွေကိုစစ်ဆေးပြီးကန့်သတ်ချက်တွေကိုလိုအပ်သလိုထည့်ပါ။ အောက်ပါ command ကို သုံး. လက်ရှိကန့်သတ်ချက်ကိုစစ်ဆေးနိုင်သည်။

 ulimit -n

အကယ်. သင်သည်ကန့်သတ်ချက်များထည့်ရန်လိုအပ်ပါကဖိုင်သတ်မှတ်ချက်အများဆုံးအရေအတွက်ကိုမြှင့်တင်ရန်သင် system configuration file ( /etc/security/limits.conf ) ကိုပြုပြင်ရန်သင်ပြောင်းလဲနိုင်သည်။

7 ။ ကုဒ်သည်အကျပ်အတည်းများသို့မဟုတ်အခြားယုတ္တိရှိသောပြ problems နာများမရှိကြောင်းသေချာပါစေ

သင်၏ PHP Code တွင်အကျပ်အတည်းသို့မဟုတ်အခြားပိတ်ဆို့ခြင်းဆိုင်ရာယုတ္တိဗေဒရှိပါက Socket_Accept () သည် execute လုပ်ခြင်းသို့မဟုတ်တုံ့ပြန်ခြင်းသည်ပျက်ကွက်နိုင်သည်။ သယံဇာတပြိုင်ပွဲသို့မဟုတ်မလျော်ကန်သောပိတ်ဆို့မှုများကြောင့်ပရိုဂရမ်သည်မအောင်မြင်စေရန်သေချာစေရန်ကုဒ်နံပါတ်ရှိ synchronization ယန္တရားကိုစစ်ဆေးပါ။

ဖြေရှင်းချက် -

  • ရေရှည်သော့ခတ်ခြင်းလုပ်ငန်းများမရှိကြောင်းသေချာပါစေ။

  • သင်၏ကုဒ်နံပါတ်ထဲရှိအကျပ်အတည်းများသို့မဟုတ်အခြားစွမ်းဆောင်ရည်မြှင့်တင်ခြင်းများကိုမှတ်တမ်းများနှင့် debugging tools များဖြင့်စစ်ဆေးပါ။

8 ။ သတင်းအချက်အလက်ကိုင်တွယ်ခြင်းနှင့်သတင်းအချက်အလက် debugging အမှားသုံးပါ

ပြ problems နာများကိုလျင်မြန်စွာရှာဖွေရန်, အမှားကိုင်တွယ်ခြင်းနှင့်သတင်းအချက်အလက်များကိုကုဒ်ထဲသို့ထည့်သွင်းနိုင်သည်။ Socket_Accept () သူ့ဟာသူ မှားယွင်းစွာ ပြန်သည်။ ဆက်သွယ်မှုမရှိပါကသင်အမှားအယွင်းများကိုဖမ်းယူနိုင်ပြီးပြ the နာသည်မည်သည့်နေရာတွင်ရှိသည်ကိုရှာဖွေရန်အထောက်အကူပြုရန်အချက်အလက်များကိုပိုမိုပုံနှိပ်ထုတ်လွှင့်နိုင်သည်။

နမူနာကုဒ်:

 $client = socket_accept($socket);
if ($client === false) {
    echo "Error: " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
    // ဆက်သွယ်မှုများပြုပြင်ခြင်း
}

Error Message ကိုပုံနှိပ်ခြင်းအားဖြင့်သင်သည် Socket_Accept () သည် တုန့်ပြန်ခြင်းမဟုတ်ပါ, ထို့နောက်သင့်လျော်သောဖြေရှင်းနည်းများကိုပိုမိုရှင်းလင်းစွာနားလည်နိုင်သည်။