လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> socket_set_set_blocking နှင့် socket_get_status ကိုသုံးတဲ့အခါဘာတွေလုပ်နေလဲ။

socket_set_set_blocking နှင့် socket_get_status ကိုသုံးတဲ့အခါဘာတွေလုပ်နေလဲ။

gitbox 2025-09-12

1 ။ အဆိုပါ socket_set_set_blocking ၏အခန်းကဏ် and နှင့်အသုံးပြုမှု ()

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>

2 ။ အဆိုပါ socket_get_status ၏အခန်းကဏ် and နှင့်အသုံးပြုမှု ()

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>

3 ။ ပေါင်းစပ်အကြံပေးချက်များနှင့်ကြိုတင်ကာကွယ်မှုများ

Socket_set_set_Set_Blocking () နှင့် Socket_Get_status () ကိုပေါင်းစပ်ခြင်း () သည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုကိုကိုင်တွယ်သောအခါပိုမိုပြောင်းလွယ်ပြင်လွယ်။ ထိရောက်သောကွန်ယက်ဆက်သွယ်မှုကိုရရှိနိုင်ပါသည်။ ဤနေရာတွင်အသုံးပြုသောအခါအကြံပြုချက်များနှင့်ကြိုတင်ကာကွယ်မှုများမှာ -

(1) ပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်နှင့်အတည်ပြုပါ

အချို့ဖြစ်ရပ်များတွင်ကျွန်ုပ်တို့သည်ပိတ်ဆို့ခြင်းသည်ပိတ်ဆို့ခြင်း 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>
(2) ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုအတွက်စွမ်းဆောင်ရည် optimization

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 သည်အမှန်ကိုအချိန်မှန်သို့ရောက်ပြီးမလိုအပ်သောထပ်ခါတလဲလဲဖတ်ခြင်းကိုရှောင်ရှားနိုင်သည်။

(3) connection status ကိုစစ်ဆေးရန် Socket_Get_status () ကို သုံးပါ

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>
(4) socket_get_status () ကိုမကြာခဏမခေါ်ပါနှင့်

Socket_Get_status () သည် အချိန်မှန်တွင် Socket status ကိုရနိုင်သော်လည်းဤလုပ်ဆောင်မှုကိုမကြာခဏခေါ်ဆိုခြင်းသည်မကြာခဏဆိုသလိုသက်ရောက်စေနိုင်သည်။ ထို့ကြောင့်မြင့်မားသောတစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်တွင်မလိုအပ်သောနိုင်ငံတော်စစ်ဆေးမှုများကိုရှောင်ရှားရန်ခေါ်ဆိုမှုအကြိမ်ရေသည်ကျိုးကြောင်းဆီလျော်ထိန်းချုပ်ထားသည်။

(5) ချွင်းချက်ကိုင်တွယ်ခြင်းနှင့်အမှားစစ်ဆေးခြင်း

အထူးသဖြင့် 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>

4 ။ အကျဉ်းချုပ်

socket_set_set_blocking () နှင့် socket_get_status ကိုအသုံးပြုခြင်း () ပိတ်ဆို့ခြင်းကြောင့်ဖြစ်ပေါ်လာသောစွမ်းဆောင်ရည်မြှင့်တင်ခြင်းကိုရှောင်ရှားရန် Socket status ကိုသတင်းအချက်အလက်များကိုထိရောက်စွာထိန်းချုပ်နိုင်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်, ပိတ်ဆို့ခြင်း mode ကိုအားဖြည့်ခြင်းနှင့် EFF နှင့် ERRESS status ကိုစီရင်ခြင်းအားဖြင့်ပရိုဂရမ်၏တုန့်ပြန်မှုမြန်နှုန်းနှင့်အားဖြည့်ဆည်းဖွယ်ကောင်းသောတိုးတက်မှုကိုတိုးတက်စေနိုင်သည်။ သို့သော်အစိုးရစစ်စစ်ဆေးမှုများကိုမကြာခဏခေါ်ဆိုမှုသည်စွမ်းဆောင်ရည်အပေါ်သက်ရောက်မှုရှိနိုင်သည်ကိုသတိပြုသင့်သည်မှာအလွန်အကျွံခေါ်ဆိုမှုများကိုရှောင်ရှားရန်သင့်လျော်သောအချိန်များတွင်စစ်ဆေးသင့်သည်။

ဤလုပ်ဆောင်ချက်နှစ်ခုကိုအသုံးပြုခြင်းသည်တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုများကိုကိုင်တွယ်ခြင်း၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်ထိရောက်မှုကိုပိုမိုကောင်းမွန်စေနိုင်သည်။ PHP ကွန်ယက်ဆက်သွယ်ရေးအက်ပလီကေးရှင်းများကိုပိုမိုတည်ငြိမ်ပြီးထိရောက်စေသည်။