Socket_set_Set_Blocking () function ကိုအသုံးပြုသည်။ ပိတ်ဆို့ခြင်း mode တွင် socket ၏ဖတ်ခြင်းနှင့်ရေးခြင်းစစ်ဆင်ရေးများသည်ဒေတာအဆင်သင့်မဖြစ်သေးသည်အထိစောင့်ဆိုင်းလိမ့်မည်။ Mode ကိုပိတ်ဆို့မည့်အစားအချက်အလက်မရှိပါကအချက်အလက်များကိုစောင့်ဆိုင်းမည့်အစားစစ်ဆင်ရေးသည်ချက်ချင်းပြန်လာလိမ့်မည်။ ၎င်းသည်ဖောက်သည်ဆက်သွယ်မှုများစွာကိုကိုင်တွယ်ရန်လိုအပ်သောဆာဗာများအတွက်အထူးအရေးကြီးသည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode မှာပရိုဂရမ်တစ်ခုလုံးကိုဆက်သွယ်မှုတစ်ခုပိတ်ဆို့ခြင်းကြောင့်အစီအစဉ်တစ်ခုလုံးကိုချိတ်ဆွဲခြင်းမှတားဆီးနိုင်သည်။
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_set_blocking</span></span><span> ( resource </span><span><span class="hljs-variable">$socket</span></span><span> , </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$blocking</span></span><span> )
</span></span>$ socket : socket အရင်းအမြစ်။
$ ပိတ်ဆို့ခြင်း - အကယ်. မှန်ကန် ပါက Socket သည်ပိတ်ဆို့ခြင်း mode တွင်ရှိနေသည်။ အကယ်. မှားယွင်းသော် လျှင် Socket သည်ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်ရှိသည်။
ဥပမာအားဖြင့် Socket ကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသတ်မှတ်ပါ။
<span><span><span class="hljs-variable">$socket</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-title function_ invoke__">socket_set_blocking</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span></span>Socket_Get_status () function ကို blocking mode ကိုပိတ်ထားခြင်းရှိမရှိ, ပိတ်ဆို့ခြင်း mode ကိုဖွင့်ထားသလား,
ပိတ်ဆို့ခြင်း - ပိတ်ဆို့ခြင်း mode မှာရှိမရှိ, 1 ကိုပိတ်ဆို့ခြင်းကိုဆိုလိုသည်။ 0 သည်ပိတ်ဆို့ခြင်းကိုဆိုလိုသည်။
EFF - ဖိုင်အဆုံးအလံကိုရောက်ပြီလား (ဆက်သွယ်မှုပိတ်ထားတဲ့အမှုကိစ္စအတွက်)
ချို့ယွင်းချက် - လက်ရှိ socket ၏အမှားကုဒ်။
ErrorStr : လက်ရှိ socket အတွက်အမှားသတင်း။
<span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_get_status</span></span><span> ( resource </span><span><span class="hljs-variable">$socket</span></span><span> )
</span></span>ဥပမာတစ်ခု, socket status ကိုရယူပါ။
<span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_get_status</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Blocked: "</span></span><span> . </span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'blocked'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"EOF: "</span></span><span> . </span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'eof'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span></span>Socket_set_set_Set_Blocking () နှင့် Socket_Get_status () ကိုပေါင်းစပ်ခြင်း () သည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုကိုကိုင်တွယ်သောအခါပိုမိုပြောင်းလွယ်ပြင်လွယ်။ ထိရောက်သောကွန်ယက်ဆက်သွယ်မှုကိုရရှိနိုင်ပါသည်။ ဤနေရာတွင်အသုံးပြုသောအခါအကြံပြုချက်များနှင့်ကြိုတင်ကာကွယ်မှုများမှာ -
အချို့ဖြစ်ရပ်များတွင်ကျွန်ုပ်တို့သည်ပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်း mode ကိုပြောင်းလဲရန်လိုအပ်သည်။ ဥပမာအားဖြင့်ကွန်ယက်တောင်းဆိုမှုကိုလုပ်ဆောင်သောအခါ, ကွန်ယက်သည်ပိတ်ဆို့ခြင်း mode တွင်ပါ 0 င်ပါကကွန်ယက်သည်အခြေအနေကောင်းမဟုတ်သော်လည်းအချက်အလက်များအနေဖြင့်အဆင်သင့်မဖြစ်သေးပါ။ ဤအချိန်တွင်ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket_set_sblocking () မှတဆင့် socket_et_get_status () ကို socket_get_status () ကိုစစ်ဆေးနိုင်သည်။
ဥပမာအားဖြင့်:
<span><span><span class="hljs-title function_ invoke__">socket_set_blocking</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_get_status</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'blocked'</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">"Sockets သည်ယခုပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်ရှိနေပြီဖြစ်သည်。\n"</span></span><span>;
}
</span></span>Socket သည်ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင်ရှိနေစဉ်, socket_read () ကိုဖတ်ရန်အချက်အလက်မရှိပါကပင်ချက်ချင်းပြန်လာလိမ့်မည်။ ထပ်ခါတလဲလဲအဓိပ္ပာယ်မရှိသောခေါ်ဆိုမှုများကိုရှောင်ရှားရန် Socket_Get_status () ကို Socket_Get_status () နှင့်ပေါင်းစပ်နိုင်သည်။ Socket_Get_status () သည် Socket သည်ဒေတာများကိုဖတ်ရှုခြင်းရှိ,
<span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-string">''</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-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_get_status</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'eof'</span></span><span>]) {
</span><span><span class="hljs-keyword">break</span></span><span>; </span><span><span class="hljs-comment">// ဖတ်ရန်အချက်အလက်မရှိပါ</span></span><span>
}
</span><span><span class="hljs-variable">$buffer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_read</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$buffer</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-comment">// ဖတ်ပါအမှားများကိုကိုင်တွယ်</span></span><span>
</span><span><span class="hljs-keyword">break</span></span><span>;
}
</span><span><span class="hljs-variable">$data</span></span><span> .= </span><span><span class="hljs-variable">$buffer</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဒေတာကိုဖတ်ပါ: <span class="hljs-subst">$data</span></span></span><span>\n";
</span></span>အထက်ပါကုဒ်များမှတစ်ဆင့် EFF သည်အမှန်ကိုအချိန်မှန်သို့ရောက်ပြီးမလိုအပ်သောထပ်ခါတလဲလဲဖတ်ခြင်းကိုရှောင်ရှားနိုင်သည်။
Socket_Get_status () ပိတ်ဆို့ခြင်းအခြေအနေကိုစစ်ဆေးရုံသာမကအခြားသော socket နှင့်ပတ်သက်သောအခြားအရေးကြီးသောသတင်းအချက်အလက်များကိုကျွန်ုပ်တို့နားလည်ရန်လည်းကူညီသည်။ ဥပမာအားဖြင့် Socket ကိုပိတ်ထားခြင်းရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုနိုင်သည်။
<span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_get_status</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'eof'</span></span><span>]) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဆက်သွယ်မှုပိတ်ထားသည်。\n"</span></span><span>;
}
</span></span>Socket_Get_status () သည် အချိန်မှန်တွင် Socket status ကိုရနိုင်သော်လည်းဤလုပ်ဆောင်မှုကိုမကြာခဏခေါ်ဆိုခြင်းသည်မကြာခဏဆိုသလိုသက်ရောက်စေနိုင်သည်။ ထို့ကြောင့်မြင့်မားသောတစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်တွင်မလိုအပ်သောနိုင်ငံတော်စစ်ဆေးမှုများကိုရှောင်ရှားရန်ခေါ်ဆိုမှုအကြိမ်ရေသည်ကျိုးကြောင်းဆီလျော်ထိန်းချုပ်ထားသည်။
အထူးသဖြင့် Socket Operations ( socket_read () ) ဖျော်ဖြေတင်ဆက်သည့်အခါဤလုပ်ဆောင်ချက်နှစ်ခုကိုအသုံးပြုသည့်အခါ, အမှားကိုင်တွယ်မှုများကိုပြုလုပ်ရမည်။ ကွန်ယက်ပြ problems နာများသို့မဟုတ်အခြားအကြောင်းပြချက်များကြောင့် Socket Operations သည်ပျက်ကွက်နိုင်သည့်အတွက်၎င်းကိုအမှန်တကယ်အသုံးပြုသည့်အခါသင့်လျော်သောအမှားကိုင်တွယ်ပုံကိုထည့်သွင်းသင့်သည်။
<span><span><span class="hljs-variable">$buffer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_read</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$buffer</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-variable">$error_code</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အမှားကိုဖတ်ပါ: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-variable">$error_code</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>socket_set_set_blocking () နှင့် socket_get_status ကိုအသုံးပြုခြင်း () ပိတ်ဆို့ခြင်းကြောင့်ဖြစ်ပေါ်လာသောစွမ်းဆောင်ရည်မြှင့်တင်ခြင်းကိုရှောင်ရှားရန် Socket status ကိုသတင်းအချက်အလက်များကိုထိရောက်စွာထိန်းချုပ်နိုင်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်, ပိတ်ဆို့ခြင်း mode ကိုအားဖြည့်ခြင်းနှင့် EFF နှင့် ERRESS status ကိုစီရင်ခြင်းအားဖြင့်ပရိုဂရမ်၏တုန့်ပြန်မှုမြန်နှုန်းနှင့်အားဖြည့်ဆည်းဖွယ်ကောင်းသောတိုးတက်မှုကိုတိုးတက်စေနိုင်သည်။ သို့သော်အစိုးရစစ်စစ်ဆေးမှုများကိုမကြာခဏခေါ်ဆိုမှုသည်စွမ်းဆောင်ရည်အပေါ်သက်ရောက်မှုရှိနိုင်သည်ကိုသတိပြုသင့်သည်မှာအလွန်အကျွံခေါ်ဆိုမှုများကိုရှောင်ရှားရန်သင့်လျော်သောအချိန်များတွင်စစ်ဆေးသင့်သည်။
ဤလုပ်ဆောင်ချက်နှစ်ခုကိုအသုံးပြုခြင်းသည်တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုများကိုကိုင်တွယ်ခြင်း၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်ထိရောက်မှုကိုပိုမိုကောင်းမွန်စေနိုင်သည်။ PHP ကွန်ယက်ဆက်သွယ်ရေးအက်ပလီကေးရှင်းများကိုပိုမိုတည်ငြိမ်ပြီးထိရောက်စေသည်။