လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ပရိုဂရမ်ကိုရေရှည်ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်အတွက် Recover_socket_recvfrom function တွင် Recover_socket_recvfrom function တွင်မည်သို့သတ်မှတ်ရမည်နည်း။

ပရိုဂရမ်ကိုရေရှည်ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်အတွက် Recover_socket_recvfrom function တွင် Recover_socket_recvfrom function တွင်မည်သို့သတ်မှတ်ရမည်နည်း။

M66 2025-06-22

Network Programming အတွက် PHP အတွက် PHP ကိုအသုံးပြုသောအခါ stream_socket_recvfrom function သည် UDP packets များကိုရရှိလေ့ရှိသည်။ သို့သော်ပုံမှန်အားဖြင့်ဒေတာကိုလက်ခံရရှိသည်အထိဒေတာများကိုရှာဖွေသည်အထိသို့မဟုတ်အမှားတစ်ခုဖြစ်သည့်အမှားအယွင်းများကိုစောင့်ဆိုင်းနေစဉ်ဤလုပ်ဆောင်ချက်သည်လုပ်ကွက်များကိုစောင့်ဆိုင်းနေစဉ်သို့မဟုတ်အမှားတစ်ခုဖြစ်သည့်အမှားအယွင်းများဖြစ်ပေါ်သည်။ ဤရှည်လျားသောပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည်ဖတ်ရှုရန်အချိန်ကုန်ကိုသတ်မှတ်ရန်လိုအပ်သည်။

ဤဆောင်းပါးသည်ပရိုဂရမ်အပြုအမူကိုပိုမိုကောင်းမွန်စွာထိန်းချုပ်ရန်အတွက် stream_socket_recvfrom function တွင်ဖတ်ရန်အချိန်ကိုမည်သို့သတ်မှတ်မည်ကိုအသေးစိတ်ရှင်းပြပါမည်။


1 ။ stream_socket_recvfrom မှ မိတ်ဆက်

stream_socket_recvfrom function ၏အခြေခံအသုံးပြုမှုသည်အောက်ပါအတိုင်းဖြစ်သည် -

 $data = stream_socket_recvfrom($socket, 1024);

၎င်းသည်သတ်မှတ်ထားသော $ socket မှဒေတာ 1024 ခုအထိဖတ်ပါလိမ့်မည်။ အကယ်. ဒေတာမရောက်ရှိပါက function လုပ်ကွက်များနှင့်စောင့်နေကြသည်။


2 ။ ပြ problems နာများကိုပိတ်ဆို့ခြင်းနှင့်အချိန်ကုန်ချိန်ညှိချက်များ၏လိုအပ်ချက်များကိုပိတ်ဆို့ခြင်း

Peer_Socket_recvfrom ကိုခေါ်သည့်အခါ, သက်တူရွယ်တူသည်အချိန်ကြာမြင့်စွာမပို့ပါက, အချိန်ကြာမြင့်စွာမှီဝဲနေသည့်အစီအစဉ်ကိုရှောင်ရှားနိုင်ရန်အတွက်ကျွန်ုပ်တို့သည်အချိန်ကုန်ယန္တရားတစ်ခုချမှတ်ရန်လိုအပ်သည်။


3 ။ Read Timeout ကိုဘယ်လိုသတ်မှတ်ရမလဲ

PHP တွင်စစ်ဆင်ရေးစီးဆင်းမှုသည် stream_set_seout_timeout function မှတဆင့်အကောင်အထည်ဖော်သည်။ ဤလုပ်ဆောင်ချက်သည်ပွင့်လင်းသောစီးဆင်းမှုအတွက်အချိန်ကုန်အချိန်သတ်မှတ်နိုင်သည်။

ဥပမာ -

 // ဖန်တီး UDP socket
$socket = stream_socket_server("udp://0.0.0.0:9999", $errno, $errstr, STREAM_SERVER_BIND);

if (!$socket) {
    die("无法ဖန်တီးsocket: $errstr ($errno)\n");
}

// အချိန်ကုန်ထားပါ,စက္ကန့်ပိုင်းအတွင်းနှင့် microseconds အတွက်ယူနစ်
// 这里အချိန်ကုန်ထားပါ时间为 5 စက်ဏန့်
stream_set_timeout($socket, 5);

// တစ် ဦး ဖတ် function ကိုခေါ်ခြင်း
$data = stream_socket_recvfrom($socket, 1024);

$info = stream_get_meta_data($socket);
if ($info['timed_out']) {
    echo "ဒေတာအချိန်ကုန်ကိုဖတ်ပါ,စောင့်ဆိုင်းအရှုံးမပေး\n";
} else {
    echo "ဒေတာကိုလက်ခံရရှိခဲ့သည်: $data\n";
}
  • steam_set_simeout ($ Socket, 5) သည် 5 စက္ကန့်ကြာအောင်သတ်မှတ်ထားသည်။

  • ဒေတာများကိုဖတ်ပြီးနောက်, stream_get_meta_data ($ socket) ဖြင့်အချိန်ကုန်ကိုဆုံးဖြတ်ခြင်းရှိမရှိဆုံးဖြတ်ပါ။


4 ။ မဲဆန္ဒရှင်များနှင့် တွဲဖက်. ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသုံးပါ

အချိန်ကုန်ကိရိယာအပြင်အခြားဘုံအလေ့အကျင့်တစ်ခုမှာ socket ကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသတ်မှတ်ရန်နှင့်အခါအားရွေးခြင်းသို့မဟုတ်အဖြစ်အပျက် -ard-driven in နှင့်တွဲဖက်ထားသည့်အချက်အလက်များကိုဖတ်ရန်ဖြစ်သည်။

 // ဖန်တီး socket
$socket = stream_socket_server("udp://0.0.0.0:9999", $errno, $errstr, STREAM_SERVER_BIND);

if (!$socket) {
    die("无法ဖန်တီးsocket: $errstr ($errno)\n");
}

// Non-blocking mode ကိုသတ်မှတ်ပါ
stream_set_blocking($socket, false);

$startTime = time();
$timeout = 5; // စက်ဏန့်

while (true) {
    $data = stream_socket_recvfrom($socket, 1024);
    if ($data !== false && $data !== '') {
        echo "ဒေတာကိုလက်ခံရရှိခဲ့သည်: $data\n";
        break;
    }
    
    if (time() - $startTime > $timeout) {
        echo "အချိန်ကုန်ကိုဖတ်ပါ,ကွင်းဆက်မှထွက်ပါ\n";
        break;
    }
    
    // ရေှာင်ရှားCPUအလွန်မြင့်မားသောထေို,သင့်လျော်စွာအိပ်ပါ
    usleep(100000); // 100毫စက်ဏန့်
}

ဤနည်းလမ်းသည်ဖတ်ရန်ယုတ္တိဗေဒကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ထိန်းချုပ်နိုင်ပြီး Event Loops ၏ပေါင်းစည်းမှုကိုလွယ်ကူချောမွေ့စေသည်။


5 ။ အကျဉ်းချုပ်

  • stream_socket_recvfrom လုပ်ကွက်များပုံမှန်အားဖြင့်လုပ်ကွက်များပုံမှန်အားဖြင့်ပြုလုပ်နိုင်သည်။ ၎င်းသည်အစီအစဉ်ကိုအချိန်ကြာမြင့်စွာစောင့်ဆိုင်းစေနိုင်သည်။

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

  • စာဖတ်ပြီးနောက် timeout ရောက်ရှိခြင်းရှိမရှိဆုံးဖြတ်ရန် stream_get_meta_data ကို သုံးပါ။

  • ကော်မတီမဟုတ်သော mode ကိုလည်း အသုံးပြု. မဲရုံများအားမဲရုံများဖြင့်ထိန်းချုပ်ရန်လည်းအသုံးပြုနိုင်သည်။

ကျိုးကြောင်းဆီလျော်စွာအချိန်ကုန် parameters တွေကိုချိန်ညှိခြင်းကွန်ယက်ပရိုဂရမ်များကိုတည်ငြိမ်သောတုန့်ပြန်မှုကိုသေချာစွာတုန့်ပြန်ရန်သော့ချက်ဖြစ်သည်။