PHP တွင်ကွန်ယက်ကိုဆက်သွယ်သည့်အခါ client နှင့် server အကြားဆက်သွယ်မှုကို TCP protocol မှတဆင့်ဆက်သွယ်မှုတစ်ခုတည်ဆောက်ရန်လိုအပ်သည်။ ဆက်သွယ်မှု၏အပြုအမူကိုထိန်းချုပ်ရန်ကျွန်ုပ်တို့သည်ကွန်ယက်ဆက်သွယ်ရေးကိုပိတ်ဆို့ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းမပြုရန်သို့မဟုတ်ပိတ်ဆို့ရန်ကွဲပြားခြားနားသော socket options များကိုသုံးနိုင်သည်။ Socket_set_block သည် socket ကိုပိတ်ဆို့ခြင်း mode ကို socket လုပ်ရန် socket သို့သတ်မှတ်ရန်ကူညီနိုင်သည့်အလွန်အရေးကြီးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်ကွန်ရက်ဆက်သွယ်ရေးလိုအပ်ချက်အတွက်အလွန်အသုံးဝင်သည်။
Network programing တွင်ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သော modes များသည် socket operations လုပ်သည့်အခါပရိုဂရမ်တစ်ခု၏အပြုအမူကိုဆုံးဖြတ်သည်။
Blocking Mode : ဤ mode တွင်ဤစနစ်တွင်ဤအစီအစဉ်တွင်လုပ်ဆောင်ရန်အတွက်လုပ်ငန်းလည်ပတ်ရန်စောင့်ဆိုင်းနေမည် (ဥပမာစာဖတ်ခြင်း, ဆိုလိုသည်မှာဖတ်ရန်အချက်အလက်မရှိပါကဤအစီအစဉ်သည်စောင့်နေလိမ့်မည်။
Non-blocking မဟုတ်သော mode : ဤ mode တွင်ဤစနစ်တွင်ပရိုဂရမ်သည်စစ်ဆင်ရေးပြီးစီးရန်မစောင့်ပါ။ အကယ်. ဒေတာကိုယာယီမရနိုင်ပါက socket လည်ပတ်မှုသည်အမှားတစ်ခုသို့မဟုတ်တိကျသောအဆင့်အတန်းတန်ဖိုးကိုချက်ချင်းပြန်ပို့ပေးလိမ့်မည်။
Mode ကိုပိတ်ဆို့ရန်ဖန်တီးထားသည့် socket တစ်ခုကိုသတ်မှတ်ရန် Socket_set_sblock function ကိုအသုံးပြုသည်။ ၎င်းသည်ကွန်ယက်တောင်းဆိုမှုများကိုကိုင်တွယ်သောအခါ၎င်းသည်အထူးသဖြင့်ပရိုဂရမ်ကိုပုံမှန်ပြန်ပို့ရန်စောင့်ဆိုင်းရန်စောင့်ဆိုင်းနေသည့်အခါ၎င်းသည်အလွန်အသုံးဝင်သည်။ သတိပြုသင့်သည်မှာ socket_set_sclock function သည်တိကျသောပိတ်ဆို့ခြင်းအပြုအမူကိုသတ်မှတ်ရန်အပိုဆောင်း parameters တွေကိုမလိုအပ်ပါ။ ၎င်းသည် Socket ကိုခေါ်ဆိုမှုတစ်ခုမှတဆင့် mode ကိုပိတ်ဆို့ရန်သာဖြစ်သည်။
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_set_block</span></span><span> ( resource </span><span><span class="hljs-variable">$socket</span></span><span> );
</span></span>$ socket : mode ကိုပိတ်ဆို့ရန် socket အရင်းအမြစ်။
ဤလုပ်ဆောင်မှုသည်အခြေအနေအောင်မြင်မှုရကြောင်းညွှန်ပြရန် မှန်ကန် ပြီးသတ်မှတ်ခြင်းမအောင်မြင်ကြောင်းညွှန်ပြရန် မှားယွင်းစွာ ပြန်ပို့သည်။ ချိန်ညှိမှုမအောင်မြင်ပါက sociec_last_Error () ကို သုံးနိုင်သည်။
Socket_set_Stock ကို အသုံးပြု. TCP ဆက်သွယ်မှုကိုပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ရန်မည်သို့အသုံးပြုရမည်နည်း။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဖန်တီး TCP 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_STREAM, SOL_TCP);
</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">"Socket ဖန်တီး失败: "</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">// ပစ်မှတ် server ကိုဆက်သွယ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$address</span></span><span> = </span><span><span class="hljs-string">'127.0.0.1'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>;
</span><span><span class="hljs-variable">$result</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">if</span></span><span> (</span><span><span class="hljs-variable">$result</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-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-comment">// 将Sockets设置为阻塞模式</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">socket_set_block</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">"Sockets已成功设置为阻塞模式。\n"</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">"设置Sockets为阻塞模式失败。\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-comment">// ဒေတာပို့ပါ</span></span><span>
</span><span><span class="hljs-variable">$message</span></span><span> = </span><span><span class="hljs-string">"Hello, Server!"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">socket_write</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$message</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$message</span></span><span>));
</span><span><span class="hljs-comment">// တုံ့ပြန်မှုကိုလက်ခံရရှိသည်</span></span><span>
</span><span><span class="hljs-variable">$response</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">echo</span></span><span> </span><span><span class="hljs-string">"ဆာဗာတုံ့ပြန်မှု: <span class="hljs-subst">$response</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>ဤဥပမာတွင်ကျွန်ုပ်တို့သည် TCP socket တစ်ခုကို ဦး စွာဖန်တီးပြီး societ_connect မှ societ_connect (IP သည် 127.0.0.1.1.1.1.0.1 ) နှင့် port သည် 8080 ဖြစ်သည်ဟုယူဆသည်။ ထို့နောက် socket ကို mode ကို socket_set_Set_Block ကို ပိတ်ဆို့ရန် mode ကိုပိတ်ဆို့ရန်နေရာချထားရန်နေရာချထားရန်နှင့် server ၏တုံ့ပြန်မှုကိုစောင့်ပါ။
ပိတ်ဆို့ခြင်း mode ၏သက်ရောက်မှုများ :
ပိတ်ဆို့ခြင်း mode တွင် socket_read (သို့) socket_write ကဲ့သို့သောစစ်ဆင်ရေးများသည်၎င်းတို့ပြီးဆုံးသည်အထိသို့မဟုတ်အချိန်ကုန်ဆုံးသည်အထိလက်ရှိလုပ်ငန်းစဉ်ကိုပိတ်ပင်ထားသည်။ ထို့ကြောင့်အချိန်ကြာမြင့်စွာတုံ့ပြန်မှုမရှိသောဆက်သွယ်မှုများကိုထုတ်ပေးသောအခါအစီအစဉ်သည်တုံ့ပြန်မှုမရှိပါ။
ဆာဗာဘေးထွက်တုန့်ပြန်မှုမြန်နှုန်းသည်ထိန်းချုပ်နိုင်စွမ်းရှိပြီးမဟုတ်ရင်ပိတ်ဆို့ခြင်း mode ကိုပိတ်ဆို့ခြင်း mode ကိုပိတ်ဆို့ခြင်း mode ကိုကန့်သတ်ထားတဲ့ network ပတ် 0 န်းကျင်မှာမြင့်မားတဲ့စွမ်းဆောင်ရည်မြှင့်တင်ရေးကိုဖြစ်ပေါ်စေနိုင်တယ်။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုဖွင့်ခြင်း -
အကယ်. သင်သည် socket ကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode သို့ ( socket_set_set_set_set ကိုမှတစ်ဆင့်) ကိုသတ်မှတ်ထားပါက socket_set_block ကို ပိတ်ထားရန် mode ကိုပိတ်ရန် mode ကိုပြောင်းလဲနိုင်သည်။ သို့သော် switching mode များသည်ရှိပြီးသား connection အပြုအမူကိုအကျိုးသက်ရောက်နိုင်ကြောင်းသတိပြုရန်အရေးကြီးသည်။
အမှားကိုင်တွယ်ခြင်း :
Socket_set_set_Block ကို အသုံးပြုတဲ့အခါ function ရဲ့ပြန်လာတန်ဖိုးကိုစစ်ဆေးဖို့သင်ဂရုပြုသင့်တယ်။ ချိန်ညှိမှုမအောင်မြင်ပါက socket_last_Error ကို အသုံးပြု. သတ်သတ်မှတ်မှတ်အမှားကုဒ်ကိုရရှိရန်နှင့်သက်ဆိုင်သောအစီအမံများကိုယူရန်အသုံးပြုနိုင်သည်။
သက်ဆိုင်သည့်အခြေအနေများ :
အားပိတ်ဆို့ခြင်း mode သည်များသောအားဖြင့်အစဉ်အလာကွန်ယက်မော်ဒယ်များကဲ့သို့သောအမှာစာနှင့်သမာဓိရှိရန်လိုအပ်သည့်ဒေတာပြ prottrint နာများပြုလုပ်ရန်လိုအပ်သည့် data stritt scervarios များအတွက်သင့်လျော်သည်။ ဤနည်းလမ်းတွင် 0 န်ဆောင်မှုခံယူသူသည်လာမည့်စစ်ဆင်ရေးကိုမလုပ်ဆောင်မီဆာဗာကိုသိမ်းဆည်းရန်စောင့်ဆိုင်းလိမ့်မည်။
Socket_set_block သည် PHP တွင်ရိုးရှင်းသောနှင့်ထိရောက်သောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်ကွန်ရက်ဆက်သွယ်ရေးအခြေအနေများအတွက်အထူးသဖြင့်ဆာဗာကိုတုန့်ပြန်ရန်နှင့်လုပ်ငန်းစဉ်ကိုစောင့်ဆိုင်းရန်စောင့်ဆိုင်းရန်လိုအပ်သည့်အတွက်အလွန်အသုံးဝင်သည်။ အမှန်တကယ်အသုံးပြုမှုတွင် developer များကကွန်ယက်ဆက်သွယ်ရေး၏ထိရောက်မှုနှင့်တည်ငြိမ်မှုကိုသေချာစေရန်သူတို့၏ကိုယ်ပိုင်လိုအပ်ချက်များနှင့်အညီ developer များပိတ်ဆို့ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းဆိုင်ရာ modes များကိုရွေးချယ်သင့်သည်။