လက်ခံရရှိသည့်ကြားခံသည်အလွန်သေးငယ်လျှင်၎င်းသည် socket_recvmsg သို့မကြာခဏဖုန်းခေါ်ဆိုပါကစနစ်ခေါ်ဆိုမှု overhead တိုးမြှင့်ခြင်း, အကယ်. ကြားခံသည်ကြီးမားလွန်းပါက၎င်းသည်မှတ်ဥာဏ်ကိုဖြုန်းတီးနိုင်သည်။ application scario အရကြားခံအရွယ်အစားကိုညှိရန်အကြံပြုသည်။
<span><span><span class="hljs-variable">$buf_size</span></span><span> = </span><span><span class="hljs-number">8192</span></span><span>; </span><span><span class="hljs-comment">// packet အရွယ်အစားနှင့် throughput အရသိရသည်ညှိ</span></span><span>
</span><span><span class="hljs-variable">$msg</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_recvmsg</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$buf_size</span></span><span>);
</span></span>ကွဲပြားခြားနားသောကြားခံအရွယ်အစားရှိ throughput နှင့် latency ကိုစမ်းသပ်ခြင်းသည်ပိုမိုကောင်းမွန်အောင်လုပ်ရန်အရေးကြီးသောခြေလှမ်းတစ်ခုဖြစ်သည်။
Socket_recvmsg ဟုခေါ်သောအချိန်ကိုလက်ခံသူသည်မက်ဆေ့ခ်ျတစ်ခုသာလျှင်မက်ဆေ့ခ်ျတစ်ခုသာဖတ်ပါက function calls နှင့် CPU အခြေအနေပြောင်းခြင်းအရေအတွက်တိုးလာလိမ့်မည်။
ဖြေရှင်းချက် -
ဖြစ်နိုင်လျှင်မက်ဆေ့ခ်ျများအတူတကွပေးပို့ပါ။
လက်ခံရရှိသည့်အဆုံးတွင်, တစ်ချိန်တည်းတွင်ဒေတာများကိုပိုမိုဖတ်ရှုရန်ကြိုးစားပြီးနောက်ဖြည်ချပါ။
PHP တွင် Socket_recvmsg သည် ဒေတာများကို PHP variable များကိုအချိန်တိုင်းတွင်ကူးယူသည်။ Optimization အတွက်:
ရည်ညွှန်းလမ်းကြောင်းကိုအသုံးပြုရန်ကြိုးစားပါသို့မဟုတ်အခြေခံကြားခံကိုတိုက်ရိုက်ကိုင်တွယ်ပါ။
ထပ်ခါတလဲလဲမိတ္တူကူးခြင်းကိုအကြိမ်ကြိမ်ရှောင်ကြဉ်ပါ,
စွမ်းဆောင်ရည်မြင့်မားသောလိုအပ်ချက်များအတွက် PHP Extension သို့မဟုတ် FFI ကိုမှတ်ဉာဏ်ကိုတိုက်ရိုက်လည်ပတ်ရန်သင်စဉ်းစားနိုင်သည်။
ကွဲပြားခြားနားသော societ အမျိုးအစားများနှင့် protocols များသည်စွမ်းဆောင်ရည်အပေါ်သိသာသောသက်ရောက်မှုရှိသည် -
UDP socket များသည်များသောအားဖြင့် TCP ထက် TCP ထက်ပိုမိုထိရောက်သောအခြေအနေများဖြစ်သည်။
TCP socket များသည်ယာဉ်အသွားအလာကြီးများသို့မဟုတ်ယုံကြည်စိတ်ချရသောကူးစက်မှုများအတွက်သင့်တော်သော်လည်း Nagle algorithm သည်နှောင့်နှေးစေနိုင်သည်ကိုသတိပြုပါ။
TCP Sockets အတွက် Nagle Algorithm ကိုပိတ်ထားနိုင်သည် -
<span><span><span class="hljs-title function_ invoke__">socket_set_option</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, SOL_TCP, TCP_NODELAY, </span><span><span class="hljs-number">1</span></span><span>);
</span></span>အကယ်. လျှောက်လွှာသည် 0 ါးမြင့်သောတစ်ပြိုင်နက်တည်းဖြစ်လျှင်ပိတ်ဆို့ခြင်းမဆိုပိတ်ဆို့ခြင်းမဆို minimize လုပ်ပါ။
လက်ခံရရှိသည့်ကွင်းဆက်တွင် အိပ်စက်ခြင်းကို ရှောင်ပါ။
Socket_Recvmsg တစ်ခုတည်းကိုပိတ်ဆို့ခြင်းအစား Socket_select သို့မဟုတ် stream_seeShect ကို သုံးပါ။
အကြီးစားကွန်ယက်အက်ပလီကေးရှင်းများအတွက် Libevent သို့မဟုတ် Refriphp ကို အသုံးပြုသကဲ့သို့ဖြစ်ရပ်မောင်းနှင်သည့်မော်ဒယ်များသည်ဒေတာများ 0 င်ရောက်ခြင်းဖြစ်ရပ်များကိုပိုမိုထိရောက်စွာကိုင်တွယ်နိုင်သည်။
ဤချဉ်းကပ်မှုသည်မဲရုံ 0 င်မှုနှင့်ပျင်းရိခြင်း,
socket_recvmsg စွမ်းဆောင်ရည်ကို optimizing အတွက်အဓိကအတွေးအခေါ်များမှာ -
Non-blocking mode + ဖြစ်ရပ်မောင်းနှင် ။
ကျိုးကြောင်းဆီလျော်သောကြားခံအရွယ်အစား နှင့် အသုတ်ဖတ်ပါ ။
ဒေတာကူးယူခြင်းကိုလျှော့ချပါ ။
သင့်လျော်သော Socket အမျိုးအစားနှင့် protocol ကိုရွေးချယ်ပါ ။
စနစ်ခေါ်ဆိုမှုများကိုပိတ်ဆို့ခြင်းကိုရှောင်ပါ ။
အထက်ပါနည်းလမ်းများကိုပြည့်စုံစွာကျင့်သုံးခြင်းအားဖြင့် socket_recvmsg ၏စွမ်းဆောင်ရည်ကို PHP တွင်အထူးသဖြင့် PHP တွင်အထူးသဖြင့်မြင့်မားသောတစ်ပြိုင်နက်တည်း,