လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Setchronous မော်ဒယ်လ်ရန် Socket_set_block အခန်းကဏ် role ကို

Setchronous မော်ဒယ်လ်ရန် Socket_set_block အခန်းကဏ် role ကို

gitbox 2025-05-26

PHP Network Programming တွင်ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမရှိသော socket operations များသည်ပရိုဂရမ်၏ကွပ်မျက်ခြင်းလုပ်ငန်းစဉ်နှင့်စွမ်းဆောင်ရည်ကိုတိုက်ရိုက်သက်ရောက်မှုရှိသည်။ အထူးသဖြင့်ဆွေးနွေးမှုပုံစံကိုတစ်ပြိုင်တည်းချိန်ကိုက်ရန်အသုံးပြုသောအခြေအနေတွင်ရှိသည့်အခြေအနေများတွင် function_set_sc_block () သည်အထူးအရေးကြီးသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုပတ် 0 န်းကျင်တွင်ထပ်တူပြုခြင်းပုံစံကိုရှုထောင့်ဆန်းစစ်ရန် asynchronous မှ၎င်း၏သီးခြားအခန်းကဏ် and နှင့်လျှောက်လွှာဥပမာများကိုခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။


1 ။ မိတ်ဆက်ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သော mode များကိုမိတ်ဆက်ခြင်း

Socket Communication အတွက်အခြေခံအလုပ်လုပ်သည့် mode နှစ်ခုရှိသည်။

  • Blocking Mode : စာဖတ်ခြင်း, အရေးအသားနှင့်အခြားစစ်ဆင်ရေးများပြုလုပ်သောအခါဒေတာအဆင်သင့်မဖြစ်သေးပါကလုပ်ငန်းလည်ပတ်မှုပြီးသည်အထိလုပ်ဆောင်မှုသည်အစီအစဉ်ကိုပိတ်ဆို့လိမ့်မည်။ ဤ mode သည်ပရိုဂရမ်အတွက်ရိုးရှင်းပါသည်, သို့သော် 0 န်ကြီးဌာန၏မြင့်မားသောယဉ်ကျေးမှုဆိုင်ရာပတ်ဝန်းကျင်တွင်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းများကိုဖြစ်ပေါ်စေသည်။

  • ပိတ်ဆို့ခြင်းမဟုတ်သော mode : စစ်ဆင်ရေးချက်ချင်းပြန်လာသည်။ ဒေတာအဆင်သင့်မဖြစ်သေးပါကအမှားတစ်ခုသို့မဟုတ်သတ်သတ်မှတ်မှတ်အဆင့်အတန်းကုဒ်ကိုပြန်ပို့လိမ့်မည်။ အစီအစဉ်သည်အခြားအလုပ်များကိုဆက်လက်လုပ်ဆောင်နိုင်ပြီးပြတ်တောင်းပြတ်တောင်းဖြစ်ရပ် - မောင်းနှင်သည့်မော်ဒယ်များအတွက်သင့်လျော်သောအခြားလုပ်ငန်းများကိုဆက်လက်လုပ်ဆောင်နိုင်သည်။

PHP တွင်ဤပြည်နယ်နှစ်ခုကို socket_set_sclock () နှင့် socket_set_set_set_sclock () မှတဆင့် swicched နိုင်ပါတယ်။


2 ။ ထပ်တူပြုခြင်းစံနမူနာမှ allynchronous ၏နောက်ခံ

atynchronous model လက်အောက်တွင်ဤအစီအစဉ်သည်လုပ်ငန်းပြီးစီးရန်စစ်ဆင်ရေးကိုမစောင့်ပါ, ပရိုဂရမ်ယုတ္တိဗေဒကိုရိုးရှင်းအောင်လုပ်ရန်မှာအကြိမ်ပေါင်းများစွာတွင် developer များကပြတ်ပြတ်သားသားလုပ်ခြင်းအားဖြင့် "အတုအယောင်အပြုအမူ" ကိုအချို့သောအဆင့်များ၌ထပ်တူပြုခြင်းဖြင့်လုပ်ဆောင်မှုကိုပြောင်းလဲစေလိမ့်မည်။

ဤအချိန်တွင် Socket_set_set_block () သည် အဓိကအခန်းကဏ် plays မှပါ 0 င်သည်။


3 ။ Socket_set_set_block () ကိုထပ်တူပြုခြင်း

သင်၏ Socket သည်ပိတ်ဆို့ခြင်း (ပြတ်တောင်းပြတ်တောင်းခြင်း) သည်ပိတ်ဆို့ခြင်းမဟုတ်ကြောင်း, အကယ်. သင်သည်ခွဲစိတ်ကုသမှုတစ်ခုပြုလုပ်ရန်လုပ်ဆောင်လိုပါက "ပိတ်ဆို့ခြင်းနှင့်စောင့်ခြင်း " သည်,

 socket_set_block($socket);

၎င်းသည် socket ကိုပိတ်ဆို့ခြင်းကိုပိတ်ရန်နှင့်နောက်ဆက်တွဲဖတ်ခြင်းနှင့်ရေးဆွဲခြင်းသည်စစ်ဆင်ရေးပြီးစီးသည်အထိသို့မဟုတ်အချိန်ကုန်သက်သာသည်အထိစောင့်ဆိုင်းလိမ့်မည်။ ဤနည်းအားဖြင့်သင်၏ပရိုဂရမ်သည်တစ်ပြိုင်နက်တည်းကွပ်မျက်ခြင်း,

သတ်သတ်မှတ်မှတ်လုပ်ဆောင်ချက်များပါဝင်သည်:

  • ပရိုဂရမ်ကိုဒေတာအဆင်သင့်မဖြစ်သေးမှီခေတ္တရပ်နားပါ ။ ဥပမာအားဖြင့် "အချည်းနှီးသောဖတ်ခြင်း" ကို ကာကွယ်ရန်,

  • ထိန်းချုပ်မှုလုပ်ငန်းစဉ်ကိုရိုးရှင်းအောင်ပြုလုပ်ခြင်း - အဘယ်သူမျှမဖြစ်ရပ် loops သို့မဟုတ် callbacks မလိုအပ်ပါ။

  • ထပ်တူထပ်မျှအပြန်အလှန်ဆက်သွယ်မှုကိုသေချာစေရန်


4 ။ Code ဥပမာ

အောက်ပါတို့သည်ရိုးရှင်းသော TCP client ကိုပြသသည်။ ပထမ ဦး စွာပိတ်ဆို့ခြင်းမဟုတ်သောဆက်သွယ်မှုတစ်ခုကိုတည်ဆောက်ပါ။ ဆာဗာတုန့်ပြန်မှုကိုဖတ်ရန်ပိတ်ဆို့ခြင်း mode သို့ပြောင်းပါ။

 <?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($socket);

$host = 'gitbox.net';
$port = 8080;

// ပြတ်တောင်းပြတ်တောင်းချိတ်ဆက်မှုကြိုးပမ်းမှု
@socket_connect($socket, $host, $port);

// ဆက်သွယ်မှုပြီးစီးရန်စောင့်ပါ(သိလိုခြင်း,ဒါဟာပိုပြီးတိကျစွာကိုင်တွယ်ရန်လိုအပ်သည်)
$write = [$socket];
$except = null;
$read = null;
if (socket_select($read, $write, $except, 5) > 0) {
    // ပိတ်ဆို့ခြင်း mode ကိုမှပြောင်းပါ,ထပ်တူစာဖတ်ခြင်းအတွက်ပြင်ဆင်ပါ
    socket_set_block($socket);

    // ဒေတာကိုထပ်တူပြုခြင်းကိုဖတ်ပါ
    $data = socket_read($socket, 2048);
    echo "Received: " . $data;
} else {
    echo "Connection timeout or failed.";
}

socket_close($socket);
?>

ဤနေရာတွင် Socket_set_Set_Block () socket_read () သည် societ_read () သည်ဆာဗာကိုအချည်းနှီးသောဖတ်ရှုခြင်းကိုရှောင်ရှားရန်စောင့်ဆိုင်းလိမ့်မည်။


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

Setchronization Model တွင် Socket_set_set_block () ကို အဓိကအားဖြင့် Socket_set_block () ကိုအဓိကအားဖြင့် socket's service mode ကိုပြောင်းရန်နှင့်ပိတ်ဆို့ခြင်းဆိုင်ရာပြတ်တောက်မှုဆိုင်ရာခေါ်ဆိုမှုများကို synchronous ခေါ်ဆိုမှုများကိုပိတ်ဆို့ခြင်းသို့ပြောင်းလဲရန်ဖြစ်သည်။ developer များသည် developer များကကွန်ယက်အပြန်အလှန်ဆက်သွယ်မှုယုတ္တိဗေဒကိုရိုးရှင်းစေသည်။ အထူးသဖြင့်အချို့သောရလဒ်များကိုစောင့်ဆိုင်းရန်လိုအပ်သည့်အခါအချို့သောအဆင့်များ၌အသုံးဝင်သောအခါ။

သို့သော်ပိတ်ဆို့ခြင်း mode သည်စွမ်းဆောင်ရည်နှင့်တုန့်ပြန်မှုများကိုအကျိုးသက်ရောက်စေနိုင်သောအစီအစဉ်၏ကွပ်မျက်မှုအားခေတ္တရပ်တန့်စေလိမ့်မည်ဟုမှတ်ချက်ပြုသင့်သည်။ ထို့ကြောင့်ကွန်ယက်အက်ပလီကေးရှင်းများကိုဒီဇိုင်းရေးဆွဲရာတွင်ပိတ်ဆို့ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းမဟုတ်သောမော်ဒယ်များကိုတိကျစွာလိုအပ်ချက်များနှင့်အညီသင့်တင့်လျောက်ပတ်စွာရွေးချယ်သင့်သည်။