စွမ်းဆောင်ရည်မြင့် PHP ဆာဗာဘေးထွက် 0 န်ဆောင်မှုများကိုတည်ဆောက်ရာတွင်တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုများကိုကိုင်တွယ်ရန်အကြောင်းအရာပေါင်းစုံသို့မဟုတ်ဘက်စုံလုပ်ငန်းစဉ်ပုံစံများကိုအသုံးပြုရန်မကြာခဏလိုအပ်သည်။ Socket Programming သည်ဤရည်မှန်းချက်ကိုအောင်မြင်ရန်အရေးကြီးသောနည်းလမ်းဖြစ်သည်။ သို့သော် socket connection များကိုကိုင်တွယ်သည့်အခါပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သောချိန်ညှိချက်များသည်သော့ဖြစ်လာသည်။ The socket_set_block() and socket_set_nonblock() functions provided by PHP can be used to control this behavior. သူတို့ကိုအသုံးပြုခြင်းကိုအသုံးပြုခြင်းသည် 0 န်ဆောင်မှုတည်ငြိမ်မှုနှင့်တုန့်ပြန်မှုများကိုပိတ်ဆို့ခြင်း,
ဤဆောင်းပါးသည်ပြ problems နာများကိုပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန် Multi-Php PHP 0 န်ဆောင်မှုတစ်ခုတွင် socket_set_sblock () function ကိုမည်သို့မှန်ကန်စွာအသုံးပြုရမည်,
ပုံမှန်အားဖြင့် Socket သည်ပိတ်ဆို့နေသည်။ function_read () သို့မဟုတ် socket_accept_Ack_accept () socket_acception () socket_acception () ကိုပိတ်ဆို့ခြင်း socket တစ်ခုသို့သင်ခေါ်ဆိုသောအခါသို့မဟုတ်ဆက်သွယ်မှုအသစ်မရှိပါကဖုန်းခေါ်ဆိုမှုသည်စိတ်ကျေနပ်မှုမပြည့်မီသည်အထိခေါ်ဆိုမှုသည်စောင့်ဆိုင်းနေလိမ့်မည်။
၎င်းသည်တစ် ဦး တည်းသောချည်မျှင်ပုံစံတွင်ပြ a နာမဟုတ်ပါ, သို့သော်ကလေးချည်ခြင်းသို့မဟုတ်ကလေးငယ်ဖြစ်စဉ်သည်အရင်းအမြစ်များကိုပိတ်ဆို့ခြင်းကြောင့်အရင်းအမြစ်များကိုအချိန်တိုအတွင်းမလွှတ်နိုင်ပါက၎င်းသည်အရင်းအမြစ်များကိုဖြုန်းတီးနိုင်လျှင်အရင်းအမြစ်များကိုဖြုန်းတီးစေနိုင်သည်။
ပိတ်ဆို့ခြင်းမဟုတ်သော socket များမစောင့်ပါ, သူတို့ချက်ချင်းပြန်လာကြ လိမ့် မည် ။ သင်သည်အမှားကုဒ်ကိုရ။ socket_last_Error () မှတဆင့်လုပ်ဆောင်နိုင်သည်။
Socket_set_BLOCK () socket trom socket_set_set_set_set_nonblock () ကိုပိတ်ထားရန်အသုံးပြုနေစဉ် socket ကို socket လုပ်ရန်အသုံးပြုသည်။
Multithreading သို့မဟုတ် Multiprocessing တွင်ပါ 0 င်သည့်နည်းဗျူဟာများမှာ -
အဓိကချည်နှောင်ခြင်းသို့မဟုတ်မိဘဖြစ်စဉ်တွင်နားထောင်ခြင်း socket သည်ပိတ်ဆို့ခြင်းကိုလက်ခံခြင်းကိုရှောင်ရှားရန်ပိတ်ဆို့ခြင်း non-blocking mode ကိုမွေးစားသည်။
ကလေးချည်သို့မဟုတ်ကလေးဖြစ်စဉ်တွင် client connection တစ်ခုတည်းကိုအပြည့်အဝတောင်းဆိုချက်ဆိုင်ရာယုတ္တိဗေဒကိုပြုပြင်ရန်လွယ်ကူချောမွေ့စေရန် blocking mode သို့ပြောင်းနိုင်သည်။
Select () နှင့် stream_seselect () ကိုအသုံးပြုပြီး Event Loops သို့မဟုတ် Modes များတွင် () mode များတွင် (), ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုထိန်းသိမ်းရန်အကြံပြုသည်။
ပြ problems နာများကိုပိတ်ဆို့ခြင်းမှရှောင်ရှားရန် Socket_set_Block () ကို မည်သို့မှန်ကန်စွာအသုံးပြုရမည်ကိုပြသသည့် PHP 0 န်ဆောင်မှု၏ဥပမာတစ်ခုမှာဤနေရာတွင်ပြ covere နာများကိုပြသသည်။
<code> & lt; php set_time_limit (0); $ host = '0.0.0.0';
$ port = 9000;
// Socket ကိုဖန်တီးပါ
$ server = Socket_create (AF_INT, sock_stream, sol_tcp);
Socket_bind ($ server, $ host, $ port);
Socket_listen ($ ဆာဗာ);
Socket_set_nonBlock ($ ဆာဗာ); // အဓိက socket ကိုပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ပါ
ECHO "server {$ host}: {$ port} \ n" ကိုစတင်ခဲ့သည်။
နေစဉ် (စစ်မှန်တဲ့) {
$ client = @socket_acceCcept ($ ဆာဗာ);
if ($client === false) {
usleep(100000); // ရေှာင်ရှားCPUပျင်းရိသော
continue;
}
$pid = pcntl_fork();
if ($pid == -1) {
die("Fork failed\n");
} elseif ($pid == 0) {
// လက်အောက်ခံ
socket_close($server); // လက်အောက်ခံ不需要监听Socket
socket_set_block($client); // client ကိုတက် settingSocketပိတ်ဆို့ mode ကို၌တည်၏
$input = socket_read($client, 1024);
$output = strtoupper(trim($input));
socket_write($client, "You said: $output\n");
socket_close($client);
exit(0);
} else {
// မိဘလုပ်ငန်းစဉ်
socket_close($client); // မိဘလုပ်ငန်းစဉ်不处理客户端Socket
pcntl_wait($status, WNOHANG); // ရေှာင်ရှား僵尸进程
}
}
>
</ code>
ဤဥပမာတွင်အဓိကဖြစ်စဉ်သည် connection ကိုစောင့်ဆိုင်းရန်စောင့်ဆိုင်းရန်စောင့်ဆိုင်းနေသော ပိတ်ဆို့ခြင်း non-socket ကိုအသုံးပြုသည်။ ကလေးဖြစ်စဉ်တွင် 0 န်ဆောင်မှုခံယူသူနှင့်အပြန်အလှန်ဆက်သွယ်နေသည့် socket ကိုပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်းနှင့်ထုတ်ယူခြင်းကိုအထောက်အကူပြုသည့်အနေဖြင့်ပိတ်ဆို့ခြင်းနှင့်ပိုမိုလွယ်ကူစွာလုပ်ဆောင်ခြင်းကိုလွယ်ကူချောမွေ့စေသည်။
ပိတ်ပင်တားဆီးမှုနှင့် nonblock ကိုတစ်ချိန်တည်းတွင်အခြား socket ပေါ်တွင် socket လုပ်ရန် nonblock ကိုမထားပါနှင့်။ တာ 0 န် 0 တ္တရားများကိုသတ်မှတ်သည့်လုပ်ငန်းစဉ်များသို့မဟုတ်ချည်များကိုစီမံရန်ပိုမိုလွယ်ကူသည်။
Select () ကိုအသုံးပြုပြီးပိတ်ဆို့ခြင်းမဟုတ်သော socket မျိုးစုံကိုနားထောင်ခြင်းသည် ဖြစ်ရပ်-driven မော်ဒယ်နှင့်ကိုက်ညီရန်ပိုမိုထိရောက်သောနည်းလမ်းဖြစ်သည်။
PHP ၏ stream_socket_ * series function များသည်အချို့သောအခြေအနေများတွင်ဖော်ရွေသော encapsulation များကိုပိုမိုကောင်းမွန်စေသည် ။
"အရင်းအမြစ်ယာယီမရရှိနိုင်ပါ" ကဲ့သို့သောအမှားကုဒ်များပေါ်လာသည့်အခါမထိတ်လန့်ပါနှင့်။ ၎င်းသည်ပိတ်ဆို့ခြင်းမဟုတ်သောခြေစွပ်များ၏လက္ခဏာများအနက်မှတစ်ခုဖြစ်သည်။
Socket_set_set_BLOCK () နှင့် Socket_set_set_set_set_setblock () ကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည် PHP ကွန်ရက် 0 န်ဆောင်မှုများကိုတည်ဆောက်ရန်သော့ချက်ဖြစ်သည်။ အထူးသဖြင့်ချည်နှောင်ထားသောသို့မဟုတ်ဘက်စုံသုံးသည့်ပတ်ဝန်းကျင်တွင် 0 ယ်ယူမှုများပြုလုပ်ရန်နှင့်သင့်လျော်သောပိတ်ဆို့ခြင်း modes များကိုချမှတ်ခြင်းသည်ပြ problems နာများကိုပိတ်ဆို့ခြင်းကိုရှောင်ရှားနိုင်ရုံသာမက 0 န်ဆောင်မှုတုံ့ပြန်မှုမြန်နှုန်းနှင့်တည်ငြိမ်မှုကိုလည်းရှောင်ရှားနိုင်သည်။
အထက်ပါဥပမာများနှင့်နည်းဗျူဟာများမှတစ်ဆင့်ဤ sociffion နောက်ခံ 0 န်ဆောင်မှုကိုဖန်တီးရန်အမှန်တကယ်စီမံကိန်းများတွင်ဤ socket function များကိုပိုမိုကောင်းမွန်စွာအသုံးပြုနိုင်သည်ဟုကျွန်ုပ်ယုံကြည်သည်။ အကယ်. သင်သည်ပုဂ္ဂလိက GIT 0 န်ဆောင်မှုတစ်ခုသို့မဟုတ်အချိန်မှန်ဆက်သွယ်ရေးပလက်ဖောင်းကို <code> gitbox.net </ code> ကဲ့သို့သောအချိန်မှန်ဆက်သွယ်ရေးပလက်ဖောင်းတစ်ခုတည်ဆောက်နေပါကတိကျသော Socket Control သည်မရှိမဖြစ်လိုအပ်သည်။