PHP တွင် Socket_recv နှင့် Socket_Socke_select function များသည်ကွန်ယက်ပရိုဂရမ်တွင်အထူးသဖြင့်ပိတ်ဆို့ခြင်းမဟုတ်သော I / O စစ်ဆင်ရေးကိုလုပ်ဆောင်ရန်လိုအပ်သည့်အခါကွန်ယက်ပရိုဂရမ်တွင်အလွန်အသုံးများသောကိရိယာများဖြစ်သည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုကိုအသုံးပြုခြင်းအားဖြင့်ကွန်ယက်အချက်အလက်များကိုစောင့်ဆိုင်းခြင်းကြောင့်ပိတ်ဆို့ခြင်းကိုရှောင်ရှားနိုင်ပြီးသင်၏အစီအစဉ်၏ထိရောက်မှုနှင့်တုန့်ပြန်မှုကိုတိုးတက်စေသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုနှစ်ခုကိုပိတ်ဆို့ခြင်းမရှိသော reception ည့်ခံမှုကိုရရှိရန်မည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။
ရိုးရာပိတ်ဆို့ခြင်းသည် datocv နှင့်အခြားလုပ်ဆောင်ချက်များကို အသုံးပြု. ဒေတာများကိုလက်ခံရရှိရန်သင် socket_recv နှင့်အခြားလုပ်ဆောင်မှုများကိုအသုံးပြုသောအခါပရိုဂရမ်သည်ထိုကုဒ်နံပါတ်ကိုရပ်တန့်သွားမည်ဖြစ်ပြီးဒေတာများရောက်ရှိလာသည့်အချိန်အထိ ဆက်လက်. ဆက်လက်လုပ်ဆောင်မည်မဟုတ်။ ဆိုလိုသည်မှာဒေတာမရောက်ရှိပါကပရိုဂရမ်သည် "စွဲကပ်နေ" လိမ့်မည်။
reception ည့်ခံမှုကိုပိတ်ဆို့မည့်အစား, ဒေတာကိုလက်ခံရရှိသည့်အခါစစ်ဆေးပါလိမ့်မည်။ အချက်အလက်မရှိပါကအခြားစစ်ဆင်ရေးများကိုဆက်လက်လုပ်ဆောင်နိုင်သည်။ ဤနည်းအားဖြင့်ကျွန်ုပ်သည် / o စစ်ဆင်ရေးကိုလုပ်ဆောင်စဉ်အချက်အလက်များကိုစောင့်ဆိုင်းနေစဉ်အစီအစဉ်ကိုပိတ်ဆို့ခြင်းမပြုပါ။
Socket_select function သည် socket မျိုးစုံသည် socket မျိုးစုံအဆင်သင့်ဖြစ်ပြီလားဆိုတာကိုစစ်ဆေးရန်နည်းလမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည်စောင့်ဆိုင်းခြင်းကိုတားဆီးရန်ကူညီနိုင်သည်။ Socket_select ဟုခေါ်ဆိုသည့်အခါ၎င်းသည် socket socket တွင်ဖတ်ရန်အချက်အလက်များရှိ, မရှိစစ်ဆေးပါလိမ့်မည်။ သို့ဆိုလျှင်၎င်းသည်သက်ဆိုင်ရာ socket object ကိုပြန်ပို့သည်။ Sockets များအပေါ်ပိတ်ဆို့ခြင်းမဟုတ်သော un ည့်ခံစစ်ဆင်ရေးများပြုလုပ်ရန်ဤလုပ်ဆောင်မှုကိုသင်အသုံးပြုနိုင်သည်။
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_select</span></span><span> ( </span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$read</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$write</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$except</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$tv_sec</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$tv_usec</span></span><span> )
</span></span>
Read : ဖတ်လို့ရအောင်ရှာဖွေတွေ့ရှိရန်လိုအပ်သည့် sockets အားလုံးပါ 0 င်သောခင်းကျင်းမှု။
$ ရေးချေ - အရေးအကြီးဆုံးသော sockets အားလုံးပါဝင်သောခင်းကျင်းခြင်း။
$ မှလွဲ ။ - ခြွင်းချက်များအတွက်ရှာဖွေတွေ့ရှိရန်လိုအပ်သည့် sockets အားလုံးပါဝင်သောခင်းကျင်း။
$ tv_sec နှင့် $ tv_usec : အချိန်ကုန်များ (စက္ကန့်နှင့် microseconds) ကိုသတ်မှတ်သည်။ အကယ်. NULL မှသတ်မှတ်ထားလျှင်၎င်းသည်အဆုံးမဲ့စောင့်ဆိုင်းနေသည်။
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_recv</span></span><span> ( resource </span><span><span class="hljs-variable">$socket</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> &</span><span><span class="hljs-variable">$buf</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$flags</span></span><span> )
</span></span>
$ socket : ဒေတာကိုလက်ခံရရှိရန် socket အရင်းအမြစ်။
$ buf : လက်ခံရရှိဒေတာကိုဒီ variable ထဲမှာသိမ်းထားသည်။
$ အရှည် - လက်ခံရရှိရန် bytes အများဆုံးအရေအတွက်။
$ အလံ - လက်ခံမှုစစ်ဆင်ရေးကိုထိန်းချုပ်သောအလံများ, များသောအားဖြင့် 0 ။
ဤနေရာတွင် socket_recv ကို socket_recv ကို အသုံးပြု. socket_select ကို အသုံးပြု. socket_select ကို အသုံးပြု. socket_select လုပ်ခြင်းသည် -
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// a TCP socket</span></span><span>
</span><span><span class="hljs-variable">$server</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-comment">// ဆာဗာလိပ်စာနှင့်ဆိပ်ကမ်းများကိုတည်ဆောက်ခြင်း</span></span><span>
</span><span><span class="hljs-variable">$address</span></span><span> = </span><span><span class="hljs-string">'127.0.0.1'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">12345</span></span><span>;
</span><span><span class="hljs-comment">// ချည်နေှာင် socket</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_bind</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>, </span><span><span class="hljs-variable">$address</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);
</span><span><span class="hljs-comment">// စောင့်ကြည့်လေ့လာရေးစတင်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_listen</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>);
</span><span><span class="hljs-comment">// အချိန်ကုန်ထားပါ</span></span><span>
</span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-number">10</span></span><span>; </span><span><span class="hljs-comment">// ခဏပွဲရပ်ခြင်း 10 စက်ဏန့်</span></span><span>
</span><span><span class="hljs-variable">$read</span></span><span> = [</span><span><span class="hljs-variable">$server</span></span><span>]; </span><span><span class="hljs-comment">// ဆက်သွယ်မှုတစ်ခုရှိရင် detect လုပ်ဖို့အသုံးပြုတယ်</span></span><span>
</span><span><span class="hljs-variable">$write</span></span><span> = </span><span><span class="hljs-variable">$except</span></span><span> = [];
</span><span><span class="hljs-comment">// ကွင်းဆက်ကိုရိုက်ထည့်ပါ,client connection ကိုစောင့်ဆိုင်း</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-literal">true</span></span><span>) {
</span><span><span class="hljs-comment">// အသုံးပြု socket_select ဆက်သွယ်မှုအသစ်တစ်ခုရှိမရှိကိုရှာဖွေရန်</span></span><span>
</span><span><span class="hljs-variable">$changed</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_select</span></span><span>(</span><span><span class="hljs-variable">$read</span></span><span>, </span><span><span class="hljs-variable">$write</span></span><span>, </span><span><span class="hljs-variable">$except</span></span><span>, </span><span><span class="hljs-variable">$timeout</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$changed</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"socket_select failed\n"</span></span><span>;
</span><span><span class="hljs-keyword">break</span></span><span>;
}
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$changed</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-comment">// ဖောက်သည်အသစ်တစ်ခုရှိမရှိစစ်ဆေးပါ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>, </span><span><span class="hljs-variable">$read</span></span><span>)) {
</span><span><span class="hljs-variable">$client</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_accept</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>);
</span><span><span class="hljs-variable">$read</span></span><span>[] = </span><span><span class="hljs-variable">$client</span></span><span>; </span><span><span class="hljs-comment">// array ကိုဖတ်ရန်အသစ်ဆက်သွယ်မှုအသစ်များကိုထည့်သွင်းထားသည်</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Client connected\n"</span></span><span>;
}
</span><span><span class="hljs-comment">// အားလုံးချိတ်ဆက်မှတဆင့်ကြားမှာ socket,ဖတ်ရန်အချက်အလက်ရှိမရှိစစ်ဆေးပါ</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$read</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$sock</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$sock</span></span><span> !== </span><span><span class="hljs-variable">$server</span></span><span>) {
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$bytes_received</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_recv</span></span><span>(</span><span><span class="hljs-variable">$sock</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>, MSG_DONTWAIT);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$bytes_received</span></span><span> === </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Client disconnected\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$sock</span></span><span>);
</span><span><span class="hljs-variable">$read</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_diff</span></span><span>(</span><span><span class="hljs-variable">$read</span></span><span>, [</span><span><span class="hljs-variable">$sock</span></span><span>]); </span><span><span class="hljs-comment">// ဖတ်စာရင်းမှဤဖယ်ရှားပါ socket</span></span><span>
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$bytes_received</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Received data: <span class="hljs-subst">$data</span></span></span><span>\n";
}
}
}
}
</span><span><span class="hljs-comment">// ပိုပြီးအပြောင်းအလဲနဲ့ယုတ္တိဗေဒကိုဤနေရာတွင်ထည့်နိုင်သည်,ဥပမာအားဖြင့်, ရေးစစ်ဆင်ရေးစစ်ဆေးပါ、ခဏပွဲရပ်ခြင်း处理等</span></span><span>
}
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
bint socket socket ကိုဖန်တီးပါ ။ Socket_create နှင့် socket_bind နှင့်အတူသတ်မှတ်ထားသော TCP Socket ကို ဖန်တီး. binde socket_bind နှင့်အတူချည်နှောင်ခြင်း။
Socket_select လုပ်သည်။ Socket မျိုးစုံကိုနားထောင်သည်။ $ ဖတ်ရန် ခင်းကျင်းမှုသည် Socide_select တွင်နားထောင်ပြီး $ server socket အသစ်ကို 0 န်ဆောင်မှုခံယူသူအသစ်များကိုလက်ခံရန်အသုံးပြုလိမ့်မည်။ $ Toneout Parameter သည် 10 စက္ကန့်အထိသတ်မှတ်ထားသည်, ဆိုလိုသည်မှာ 10 စက္ကန့်အတွင်း Socket_select သည်မည်သည့်ဒေတာကိုမပေးပါကသို့မဟုတ်ဆက်သွယ်မှုအသစ်ကိုမသက်ဆိုင်ပါက Socket_select ပြန်လာလိမ့်မည်။
ဒေတာကိုလက်ခံရရှိသည် - ဖတ်ရန်အချက်အလက်များရှိပါကပိတ်ဆို့ခြင်းမဟုတ်သော reception ည့်ခံသည် socket_recv မှတစ်ဆင့်ပြုလုပ်သည်။ အကယ်. client သည်အဆက်ဖြတ်ခြင်းမရှိပါကသက်ဆိုင်ရာ socket ကိုပိတ်ပြီး၎င်းကို $ ဖတ်ရန် ပြင်ဆင်ခြင်းမှဖယ်ရှားပါ။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode : ဤကိစ္စတွင်ကျွန်ုပ်တို့သည် MSG_DontRAITED အလံကို အသုံးပြု. ပိတ်ဆို့ခြင်းမထိုးဖောက်သော reception ည့်ခံမှုမရှိသောကြောင့် socket_recv သည် ပရိုဂရမ်ကိုမပိတ်နိုင်ပါ။
Socket_selection ကိုအသုံးပြုခြင်း - Socket_select ကို Socket မျိုးစုံ၏အခြေအနေကိုစစ်ဆေးရန်အသုံးပြုသည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်၎င်းသည်ဒေတာတစ်ခုမှဒေတာများကိုအချိန်တစ်ဖြုတ်စောင့်ဆိုင်းရန်စောင့်နေခြင်းကိုရှောင်ရှားရန်ကူညီသည်။
မှတ်ဉာဏ်စီမံခန့်ခွဲမှု - Socket_select သုံးသောအခါမှတ်ဉာဏ်ယိုစိမ့်မှုနှင့်မမှန်ကန်သော socket ရှာဖွေတွေ့ရှိခြင်းကိုရှောင်ရှားရန် $ ဖတ်ရန် ခင်းကျင်းခြင်းမှပိတ်ထားသော sockets များကိုဖယ်ရှားရန်သေချာပါစေ။
Socket_recv နှင့် Socket_select ကို ပေါင်းစပ်ခြင်းအားဖြင့်သင်သည်ပိတ်ဆို့ခြင်းမရှိသော reception ည့်ခံပွဲကိုအလွန်အဆင်ပြေစွာရရှိနိုင်သည်။ ဤနည်းလမ်းသည်ပရိုဂရမ်များကိုအချက်အလက်များကိုစောင့်ဆိုင်းခြင်းကြောင့်ပိတ်ဆို့ခြင်းမှတားဆီးရုံသာမက Socket connection များကိုထိရောက်စွာကိုင်တွယ်နိုင်ပြီးပိုမိုထိရောက်သောကွန်ယက်ဆက်သွယ်မှုကိုထိရောက်စွာကိုင်တွယ်နိုင်သည်။
ပိတ်ဆို့ခြင်းမရှိသော reception ည့်ခံခြင်းသည်အရေးကြီးသောနည်းပညာတစ်ခုဖြစ်သည်။ PHP Socket Programming ကိုပြောင်းလွယ်ပြင်လွယ်အသုံးပြုမှုဖြင့်လျှောက်လွှာများ၏စွမ်းဆောင်ရည်နှင့်ပမာဏကိုတိုးတက်အောင်လုပ်နိုင်သည်။