<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဤအပိုင်းသည်ဆောင်းပါး၏အကြောင်းအရာနှင့်မသက်ဆိုင်ပါ,သာဥပမာအားဖြင့်သာ</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-meta">?></span></span><span>
<hr>
တေှ့ဆုံsocket_export_streamဒေတာကိုဖတ်လို့မရဘူးဆိုရင်ဘာလုပ်ရမလဲ?အသေးစိတ်စုံစမ်းစစ်ဆေးမှုနည်းလမ်းများမျှဝေပါ
တည်နေPHPအတွက်အသုံးပြုခဲ့သည်socketဘယ်အချိန်မှာပရိုဂရမ်းမင်း,socket_export_streamလုပ်ဆောင်ချက်များကိုမကြာခဏလေ့ကျင့်ကြသည်socketအရင်းအမြစ်ပြောင်းလဲခြင်းstreamပစ္စည်းအင်းအား,အဆင်ပြေသည်streamဆက်စပ်သောလုပ်ဆောင်ချက်များသည်အချက်အလက်များကိုစာဖတ်ခြင်းနှင့်အရေးအသားလုပ်ဆောင်မှုများပြုလုပ်သည်。မည်မှျပင်,有时候我们会တေှ့ဆုံ调用socket_export_streamနောက်ပိုင်းတွင်ဒေတာကိုဖတ်ရှုနိုင်ခြင်းမရှိတဲ့ပြ problem နာ,ပရိုဂရမ်ကိုမှီဝဲခြင်းသို့မဟုတ်ဒေတာများကိုပြုပြင်ခြင်းသည်ပုံမှန်မဟုတ်သော。ဤဆောင်းပါးသည်အသေးစိတ်စုံစမ်းစစ်ဆေးရေးအတွေးအခေါ်များနှင့်ဖြေရှင်းနည်းများကိုမျှဝေပါမည်,developer များလျင်မြန်စွာဤပြ problem နာကိုလျင်မြန်စွာရှာဖွေနှင့်ဖြေရှင်းနိုင်ရန်ကူညီပါ。
တစ်、အတည်ပြုsocketဆက်သွယ်မှုပုံမှန်လား
တည်နေ调用socket_export_streamဉီးစွာ,ပထမ ဦး စွာသေချာပါစေsocketဆက်သွယ်မှုကိုအောင်မြင်စွာတည်ထောင်ပြီးဖြစ်သည်。လွန်နိုင်ပါတယ်socket_connectနှင့်socket_acceptfunction ကို၏ပြန်လာတန်ဖိုးကိုစီရင်ဆုံးဖြတ်သည်。ဆက်သွယ်မှုကိုအောင်မြင်စွာထူထောင်မထားပါက,ကူးယူstreamသဘာဝကျကျဒေတာကိုဖတ်မရနိုင်ပါ。
နမူနာစစ်ဆေးမှုကုဒ်:
```php
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">socket_connect</span></span><span>(</span><span><span class="hljs-variable">$socket</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Socketဆက်သွယ်မှုမအောင်မြင်ပါ,အမှားကုဒ်:"</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">exit</span></span><span>;
}
</span></span>
2 ။ Socket သည်ပိတ်ဆို့ခြင်း mode တွင်ရှိ, ရှိမရှိစစ်ဆေးပါ
Socket သည် Blocking Mode တွင်ရှိနေပြီးဒေတာမရှိပါကအချက်အလက်များမရောက်မချင်းဖတ်ရန်လုပ်ဆောင်မှုကိုပိတ်ဆို့လိမ့်မည်။ socket ကိုပိတ်ဆို့ခြင်းမဏ် unts ိကိုပိတ်ခြင်းကိုမပိတ်နိုင်အောင်ကြိုးစားနိုင်သည်။
ပိတ်ဆို့ခြင်းမဟုတ်သောဥပမာကိုသတ်မှတ်ခြင်း -
<span><span><span class="hljs-title function_ invoke__">socket_set_nonblock</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span></span>
အကယ်. ၎င်းကိုပိတ်ဆို့ခြင်းမခံရပါကစာဖတ်ပြီးနောက်မှားယွင်းသောသို့မဟုတ်အချည်းနှီးသောအချက်အလက်များကိုပြန်လည်ပေးပို့ပါကလက်ရှိအချိန်တွင်မည်သည့်အချက်အလက်မျှမရှိပါ။
3 ။ စီးကိုအောင်မြင်စွာတင်ပို့ခြင်းရှိမရှိအတည်ပြုပါ
Socket_export_Stream သည် stream socket ကိုပြန်ပို့လိမ့်မည်, သို့သော်အဝင်အခြား socket သည်မမှန်ကန်ပါကသို့မဟုတ်ပိတ်ထားပါကစီးသည်မမှန်ကန်ပါ။ ပြန်လာသောရလဒ်အမျိုးအစားကိုစစ်ဆေးရန်အရေးကြီးသည်။
<span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_export_stream</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-title function_ invoke__">is_resource</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"streamပို့ကုန်ပျက်ကွက်,ကျေးဇူးပြု။ ကျသင့်ငွေတွက်ပေးပါsocketပစ္စည်းအင်းအား"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
4 ။ stream_set_sc.blocking ကိုအသုံးပြုပါ
တင်ပို့ပြီးတဲ့နောက် Stream ကိုပုံမှန်အားဖြင့်ပိတ်ဆို့ထားပြီးလိုအပ်ချက်များနှင့်အညီချိန်ညှိနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">stream_set_blocking</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span></span>
ပိတ်ဆို့ခြင်းမဟုတ်သော mode သည်ပြတ်တောင်းပြတ်တောင်းစာဖတ်ခြင်းကိုဖတ်ရန်သို့မဟုတ်ရွေးချယ်ခြင်းကဲ့သို့သောလုပ်ဆောင်ချက်များနှင့်အတူအသုံးပြုသည်။
5 ။ စာဖတ်လို့ရသည့်အခြေအနေကိုစောင့်ကြည့်ရန် stream_select ကိုသုံးပါ
တိုက်ရိုက်စာဖတ်ခြင်းအတွင်းပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်အတွက်စမ်းချောင်း၏ဖတ်နိုင်သည့်အခြေအနေကိုစစ်ဆေးရန် Stream_select ကိုအသုံးပြုရန်အကြံပြုသည်။
<span><span><span class="hljs-variable">$read</span></span><span> = [</span><span><span class="hljs-variable">$stream</span></span><span>];
</span><span><span class="hljs-variable">$write</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$except</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$tv_sec</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>; </span><span><span class="hljs-comment">// စောင့်5စက်ဏန့်</span></span><span>
</span><span><span class="hljs-variable">$num_changed_streams</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_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">$tv_sec</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$num_changed_streams</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">"stream_selectအမှားတစ်ခုဖြစ်ပွားခဲ့သည်"</span></span><span>;
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$num_changed_streams</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">1024</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-variable">$data</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"စောင့်超时,အဘယ်သူမျှမဒေတာရောက်ရှိလာခဲ့သည်"</span></span><span>;
}
</span></span>
6 ။ အဆုံးပို့ခြင်းအချက်အလက်များပေးပို့ခြင်းသည်ပုံမှန်ပို့ခြင်းရှိမရှိစစ်ဆေးပါ
အချက်အလက်များကိုမဖတ်နိုင်သည့်ပြ problem နာမှာသက်တူရွယ်တူများသည်အချက်အလက်များကိုမပို့ပါသို့မဟုတ်ဆက်သွယ်မှုပြတ်တောက်ခြင်းမရှိသေးပါ။ ဒေတာစီးဆင်းမှုသည်ပုံမှန်ဖြစ်မနေအောင် Packets များကိုရိုက်ကူးရန် TCPDump, Wireshark နှင့်အခြားကိရိယာများကိုသင်သုံးနိုင်သည်။
7 ။ PHP ပတ်ဝန်းကျင်နှင့်ဗားရှင်းကိုအတည်ပြုပါ
အချို့သော PHP ဗားရှင်းအချို့သည် socket_export_strame_stream အကောင်အထည်ဖော်မှုတွင် bug များရှိနိုင်သည်။ နောက်ဆုံးပေါ်တည်ငြိမ်သောဗားရှင်းသို့အဆင့်မြှင့်တင်ရန်အကြံပြုသည်။ သို့မဟုတ်တရားဝင် PHP bug ၏အစီရင်ခံစာနှင့်ပြန်လည်ပြုပြင်ခြင်းမှတ်တမ်းများကိုကြည့်ရှုရန်အကြံပြုသည်။
အကျဉ်းချုပ်
Socket_export_stream သည်အချက်အလက်များကိုမဖတ်နိုင်ပါကပြနာမှာ -
socket connection status ကိုပုံမှန်ဖြစ်ပါတယ်အတည်ပြုပါ
Modes များကိုပိတ်ထားသည့် socket နှင့် stream ကိုညှိပါ
စီးဆင်းမှုကိုအောင်မြင်စွာတင်ပို့ခြင်းရှိမရှိစစ်ဆေးပါ
Readable Data ကိုနားထောင်ရန် stream_select ကိုသုံးပါ
ရွယ်တူချင်းသည်ပုံမှန်အားဖြင့်ဒေတာများကိုပေးပို့ခြင်းရှိမရှိအတည်ပြုပါ
PHP ပတ်ဝန်းကျင်ဗားရှင်းတည်ငြိမ်ကြောင်းသေချာပါစေ
အထက်ပါအဆင့်များမှတစ်ဆင့်ကျွန်ုပ်တို့သည် sociec_export_stream ကိုမဖတ်နိုင်သည့်ပြ problems နာများကို အခြေခံ. နေရာချထားနိုင်ပြီးပရိုဂရမ်၏တည်ငြိမ်မှုနှင့်အားကောင်းသောကြောင့်တိုးတက်စေနိုင်သည်။
ဒီဆောင်းပါးကသင့်ကိုကူညီလိမ့်မယ်လို့မျှော်လင့်ပါတယ်။
<span></span>