So_RCVBUFF သည်လက်ခံရရှိသောကြားခံအရွယ်အစားကိုသတ်မှတ်ပေးသော socket option တစ်ခုဖြစ်သည်။ Socket ၏ကြားခံသည်ကွန်ယက်မှအချက်အလက်များကိုယာယီသိမ်းဆည်းရန်အသုံးပြုသည်။ ကြားခံအပြည့်အ 0 သည်ဆိုပါက packet အသစ်များကိုစွန့်ပစ်လိမ့်မည်, ထို့ကြောင့် So_RCVBUFF ၏အရွယ်အစားကိုသင့်လျော်စွာချိန်ညှိခြင်းကအချက်အလက်ဆုံးရှုံးမှုသို့မဟုတ်အလွန်အကျွံပိတ်ဆို့ခြင်းကိုရှောင်ရှားနိုင်ပြီး data ည့်ခံပွဲ၏ထိရောက်မှုကိုတိုးတက်စေသည်။
အချို့သောအသွားအလာအပလီကေးရှင်းအချို့တွင်ပုံမှန်ကြားခံအရွယ်အစားသည်တစ်ပြိုင်နက်တည်းကွန်ယက်ဆက်သွယ်မှုများစွာကိုထောက်ပံ့ရန်မလုံလောက်နိုင်ပါ ။
Socket_set_option သည် Socket options များသတ်မှတ်ရန် PHP တွင် function တစ်ခုဖြစ်သည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_set_option</span></span><span> ( resource </span><span><span class="hljs-variable">$socket</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$level</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$optname</span></span><span> , </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$optval</span></span><span> )
</span></span>
$ Socket - ဖန်တီးထားတဲ့ socket အရင်းအမြစ်ကိုကိုယ်စားပြုတယ်။
$ အဆင့် - များသောအားဖြင့် sol_socket ၏အဆင့်ကိုသတ်မှတ်ပါ။
$ optname : set အမည်ရှိရွေးစရာအမည်ကိုသတ်မှတ်ပြီး so_rcvbuf နှင့်သက်ဆိုင်သော option name so_rcvbuf ဖြစ်သည်။
$ optval - အများအားဖြင့်ကြားခံအရွယ်အစားကိုညွှန်ပြသည့် option ၏တန်ဖိုးကိုသတ်မှတ်သည်။
Socket_set_option မှတဆင့် So_rCVBUF ကိုဘယ်လိုသတ်မှတ်ရမှန်းရှင်းရှင်းလင်းလင်းပြသတဲ့ရိုးရှင်းတဲ့ PHP ဥပမာတစ်ခုပါ။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// a UDP Sockets</span></span><span>
</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_DGRAM, SOL_UDP);
</span><span><span class="hljs-keyword">if</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法创建Sockets: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-comment">// တည်ဆောက်သည် SO_RCVBUF အတွက် 1MB</span></span><span>
</span><span><span class="hljs-variable">$buffer_size</span></span><span> = </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span>; </span><span><span class="hljs-comment">// 1MB</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</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_SOCKET, SO_RCVBUF, </span><span><span class="hljs-variable">$buffer_size</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">"无法တည်ဆောက်သည်接收缓冲区大小: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</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-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</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 class="hljs-subst">{$buffer_size}</span></span></span><span> ဒရယ်\n";
}
</span><span><span class="hljs-comment">// 关闭Sockets</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
ဤဥပမာတွင် UDP socket တစ်ခုကိုဖန်တီးပြီးလက်ခံရရှိသည့်ကြားခံအရွယ်အစားကို 1MB အထိသတ်မှတ်သည်။ ဤနည်းအားဖြင့် Socket သည်သေးငယ်သောကြားခံများလွန်းခြင်းကြောင့်ဒေတာဆုံးရှုံးမှုမရှိဘဲအချက်အလက်များကိုလက်ခံရရှိနိုင်သည်။
ကြားခံ၏လုပ်ဆောင်ချက်သည်လက်ခံရရှိသည့်အချက်အလက်များကိုယာယီသိမ်းဆည်းရန်ဖြစ်သည်။ အကယ်. ကြားခံသည်သေးငယ်လွန်းပါကအသွားအလာမြင့်မားစွာဖြစ်လျှင်လက်ခံရရှိသည့်အချက်အလက်များသည်ကြားခံ၏အပြောင်းအလဲကြီးမားသောစွမ်းဆောင်ရည်ထက်ကျော်လွန်သွားနိုင်သည်။ ကြားခံ၏အရွယ်အစားကိုတိုးမြှင့်ခြင်းအားဖြင့်ဒေတာ reception ည့်ခံခြင်းစွမ်းရည်ကိုတိုးတက်ကောင်းမွန်စေပြီး packet အရှုံးနှင့်ပိတ်ဆို့မှုကိုလျှော့ချနိုင်သည်။
ထို့အပြင်မြင့်မားသောတစ်ပြိုင်နက်တည်းကညှိနှိုင်းမှုအရွယ်အစားကိုညှိနှိုင်းခြင်းကဆက်သွယ်မှုတစ်ခုစီအတွက် operating system ခွဲဝေမှုကြားခံများကိုလျှော့ချရန်, connection တစ်ခုစီအတွက် operating system ခွဲဝေမှုကြားခံများ၏ overhead ကိုလျှော့ချရန်,
So_rCVBUFF ၏အရွယ်အစားသည်အလွန်ကောင်းသည်, သတ်သတ်မှတ်မှတ်လျှောက်လွှာလိုအပ်ချက်များအရကြားခံအရွယ်အစားကိုကျိုးကြောင်းဆီလျော်စွာသတ်မှတ်ရန်လိုအပ်သည်။ ယေဘုယျအားဖြင့်ပြောရလျှင်အောက်ပါအချက်များအရညှိရန်အကြံပြုသည်။
Network bandwidth : ကွန်ယက် bandwidth မြင့်မားသောအခါ, ကြားခံအရွယ်အစားကိုပိုမိုအသွားအလာလိုက်လျောညီထွေဖြစ်အောင်တိုးမြှင့်နိုင်ပါသည်။
packet အရွယ်အစား - packet တစ်ခုစီ၏အရွယ်အစားသည်ကြီးမားပါကလက်ခံရရှိသည့်ကြားခံ၏အရွယ်အစားကိုသင့်လျော်စွာတိုးပွားလာနိုင်သည်။
System Memory ကန့်သတ်ချက် - အလွန်အကျွံကြားခံများသည် Memory Resources များများစားစားများလွန်းနေနိုင်သည်။ ကြားခံအရွယ်အစားသည်တတ်နိုင်သောစနစ်မှတ်ဉာဏ်၏တတ်နိုင်သမျှအတွင်းတွင်သေချာစေရန်လိုအပ်သည်။
ညှိသည့်အခါအကောင်းဆုံး configuration ကိုရှာဖွေရန်စမ်းသပ်ခြင်းနှင့်စောင့်ကြည့်လေ့လာရေးကိရိယာများမှတဆင့်ကြားခံအရွယ်အစားကိုတဖြည်းဖြည်းညှိနိုင်သည်။
လက်တွေ့ကျသောအပလီကေးရှင်းများတွင် So_RCVBUF သည်အဓိကအားဖြင့်အောက်ပါအခြေအနေများတွင်အသုံးပြုသည်။
traffic အပလီကေးရှင်းများ (ဥပမာအားဖြင့်ဗီဒီယို streaming systeming systems, log စုဆောင်းမှုစသဖြင့်), log collection စသည်ဖြင့်), ဤကိစ္စတွင်ကြားခံအရွယ်အစားကိုကျိုးကြောင်းဆီလျော်သောညှိနှိုင်းမှုသည်ကွန်ယက်အခြေအနေများညံ့ဖျင်းသောအခါအချက်အလက်အမြောက်အများကိုရရှိနိုင်ရန်သေချာစေနိုင်ပြီး၎င်းကိုဆုံးရှုံးရန်မလွယ်ကူပါ။
ကွန်ယက်မတည်ငြိမ်သောသို့မဟုတ် bandwidth သည်မတည်ငြိမ်သောဝန်းကျင်တွင်ပတ်ဝန်းကျင်ရှိသည့်ပတ်ဝန်းကျင်တွင်အလွန်အမင်းပြောင်းလဲခြင်းသည်သင့်လျော်စွာတိုးပွားလာခြင်းအားဖြင့်လက်ခံသောကြားခံအရွယ်အစားကိုတိုးမြှင့်ပေးနိုင်သည်။
တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းဆာဗာများ၌ client တစ်ခုစီသည်အချက်အလက်အမြောက်အများကိုတောင်းဆိုပြီးဆက်သွယ်မှုများစွာရှိသည်။ လက်ခံသောကြားခံအရွယ်အစားကိုတိုးမြှင့်ခြင်းသည်ဆက်သွယ်မှုတစ်ခုစီ၏တိုးပွားမှုကိုတိုးပွားစေပြီး Buffer အပြည့်အ 0 ဒေတာဆုံးရှုံးမှုနှင့်နှောင့်နှေးမှုကိုရှောင်ရှားနိုင်သည်။
System ကန့်သတ်ချက်များ - မတူညီသောလည်ပတ်မှုစနစ်များသည်လက်ခံရရှိသောကြားခံ၏အများဆုံးတန်ဖိုးကိုကန့်သတ်ထားသည်။ operating system ၏ပုံမှန်ကန့်သတ်ချက်ကို Sysctl သို့မဟုတ်အခြားစနစ်မိန့်မှာမှုများမှတဆင့်ကြည့်ရှုနိုင်ပြီးချိန်ညှိနိုင်သည်။
စွမ်းဆောင်ရည်စမ်းသပ်ခြင်း - ထုတ်လုပ်မှုပတ် 0 န်းကျင်ကိုနေရာချထားခြင်းမပြုမီစွမ်းဆောင်ရည်အရွယ်အစားကိုရရှိစေရန်အတွက်စွမ်းဆောင်ရည်အရွယ်အစားကိုရရှိရန်သေချာစေရန်စွမ်းဆောင်ရည်စမ်းသပ်ခြင်းကိုသေချာအောင်လုပ်ပါ။
မှတ်ဉာဏ်အသုံးပြုမှု - အလွန်အကျွံကြားခံများသည်မှတ်ဥာဏ်အရင်းအမြစ်များပိုမိုများပြားလာလိမ့်မည်။ ဆက်သွယ်မှုပေါင်းစုံသောပတ်ဝန်းကျင်တွင်မှတ်ဉာဏ်ခြေရာသည်ကြီးမားလာနိုင်သည်, ထို့ကြောင့်၎င်းကိုစနစ်၏မှတ်ဉာဏ်အခြေအနေပေါ် မူတည်. ကျိုးကြောင်းဆီလျော်စွာသတ်မှတ်ရန်လိုအပ်သည်။