ပိတ်ဆို့ခြင်းခံထားရသော reception ည့်ခံသည်လက်ခံသည့် function ကိုခေါ်ဆိုခြင်းခံရသည့် function ကိုခေါ်ဆိုသည့်အခါ, ၎င်းသည်လက်ခံရရှိသောအချက်အလက်များပြီးပြည့်စုံပြီးအချိန်နှင့်တပြေးညီဖြစ်သော်လည်းကွန်ယက်သည်အခြေအနေကောင်းမဟုတ်လျှင်, အစီအစဉ်သည်အချိန်ကြာမြင့်စွာစောင့်နေနိုင်သည်။
PHP မှ default socket သည်ပိတ်ဆို့ခြင်း mode ကိုဖြစ်သည်။ socket_set_set_nonblock ကိုပိတ်ဆို့ခြင်းမခံရပါက DEACT_RECV သည် အချက်အလက်များမရှိတော့သည့်အခါချက်ချင်းပြန်လာလိမ့်မည်။
Socket_set_block (Resource $ socket): Bool
သတ်မှတ်ထားသော socket ကို mode ကိုပိတ်ဆို့ရန်သတ်မှတ်သည်။
Socket_recv (INT $ len, INT $ len, into into into into into into ard socket, string string and buf): Int | false
Socket မှအချက်အလက်များကိုလက်ခံပါ။ ပိတ်ဆို့ခြင်း mode မှာအချက်အလက်မရှိဘူးဆိုရင်ဒီပရိုဂရမ်ကဒေတာတွေရောက်လာတာကိုစောင့်နေလိမ့်မယ်။
အောက်ပါဥပမာသည်ဆာဗာသို့ချိတ်ဆက်ပြီးနောက် TCP client တစ်ခုဖန်တီးရန် Socket_set_Set_Block ကို အသုံးပြု. socket ကိုပိတ်ထားရန် socket_scl ကိုသုံးပါ။ ထို့နောက်ဒေတာများကိုပိတ်ဆို့ရန် Socket_recv ကို သုံးပါ။
<?php
// ဖန်တီးTCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create failed: " . socket_strerror(socket_last_error()) . "\n");
}
// ဆာဗာကိုဆက်သွယ်ပါ
$server_ip = 'gitbox.net';
$server_port = 8080;
$result = socket_connect($socket, $server_ip, $server_port);
if ($result === false) {
die("socket_connect failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// တည်ဆောက်သည်socketပိတ်ဆို့ mode ကို၌တည်၏(ပုံမှန်အားဖြင့်၎င်းကိုပိတ်ဆို့ထားသည်)
socket_set_block($socket);
echo "အောင်မြင်စွာဆက်သွယ်မှု,ဒေတာကိုလက်ခံရရှိရန်စောင့်ဆိုင်း...\n";
while (true) {
$buffer = '';
// မှsocketအများဆုံးပိတ်ဆို့ခံရအတွက် rece ည့်ခံ1024ဒရယ်
$bytes = socket_recv($socket, $buffer, 1024, 0);
if ($bytes === false) {
echo "socket_recv failed: " . socket_strerror(socket_last_error($socket)) . "\n";
break;
} elseif ($bytes === 0) {
// ဆက်သွယ်မှုပိတ်
echo "ဆာဗာဆက်သွယ်မှုကိုပိတ်လိုက်သည်\n";
break;
} else {
echo "ခံယူ {$bytes} ဒရယ်数据: $buffer\n";
}
}
// ရုပ်သိမ်းခြင်းsocket
socket_close($socket);
?>
TCP socket တစ်ခုဖန်တီးပါ။
သတ်မှတ်ထားသောဆာဗာနှင့်ချိတ်ဆက်ပါ (Domain Name ကို gitbox.net ဖြင့်အစားထိုးသည်) ။
Socket ကိုပိတ်ဆို့ထားကြောင်းသေချာစေရန် Societ_set_set_block ။
Call Socket_recv , လက်ရှိတွင်ဒေတာမရှိပါကဒေတာဖတ်လို့မရသောအထိပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်းလိမ့်မည်။
ဒေတာကိုလက်ခံရရှိပြီးနောက်ထုတ်ပုံနှိပ်။
အကယ်. ဆာဗာသည်ဆက်သွယ်မှုကိုပိတ်ထားပါကကွင်းဆက်ကိုဖွင့်ပြီး Socket ကိုပိတ်လိုက်ပါ။
Socket_recv ခေါ်ဆိုသောအခါ Data_RECV ကိုခေါ်သည့်အခါ socket_recv ပိတ်ဆို့ခြင်းကိုပိတ်ထားရန် socket_set_block ကိုရှင်းလင်းစွာပိတ်ဆို့ခြင်း mode ကိုအတိအလင်းခွဲထုတ်နိုင်သည်။
Blocking Mode သည်ဒေတာ Real-Time လိုအပ်ချက်များမြင့်မားပြီးစောင့်ဆိုင်းခြင်းကိုစိတ်ထဲမထားပါနှင့်။
ပရိုဂရမ်ကိုပိတ်ဆို့ရန်မလိုချင်ပါက socket_set_set_setblock သို့မဟုတ် socket timeout ကိုသုံးနိုင်သည်။
ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းယန္တရားများကိုနားလည်ခြင်းနှင့်ပိတ်ဆို့ခြင်းယန္တရားများကိုနားလည်ခြင်းသည်ကွန်ယက်ဆက်သွယ်ရေးအစီအစဉ်များကိုကွဲပြားခြားနားသောလျှောက်လွှာလိုအပ်ချက်များကိုဖြည့်ဆည်းရန်ပိုမိုပြောင်းလဲစေနိုင်သည်။