Socket_set_block သည် PHP Socket Extension မှပေးသော function တစ်ခုဖြစ်သည်။
bool socket_set_block ( resource $socket )
Blocking Mode ဆိုသည်မှာ Socket_read , Socket_write စသည့် function ကိုဆိုလိုသည်။ ဒေတာကိုဖတ်လို့မရသောသို့မဟုတ်ရေးသားခြင်းသည်အထိလုပ်ဆောင်မှုကိုပိတ်ဆို့ခြင်းကိုဆိုလိုသည်။
ပိတ်ဆို့ခြင်း mode တွင် program သည် function call တစ်ခုတွင်ရပ်တန့်ပြီးလျှောက်လွှာကိုတုန့်ပြန်စရာမလိုပါ။
ပိတ်ဆို့ခြင်းအပြုအမူကိုနားလည်ခြင်းအပြုအမူသည်ထောင်ချောက်များသို့မဟုတ်ကြာမြင့်စွာစောင့်ဆိုင်းနေသောပြ issues နာများကိုနေရာချထားပေးသည်။
အမှန်တကယ်ဂီယာနှင့် reception ည့်ခံခြင်းလုပ်ငန်းစဉ်ကိုစီမံခန့်ခွဲရန်နှင့်ကွန်ယက်ဆက်သွယ်မှုမှန်ကန်မှုကိုသေချာစေရန်အတွက်အဆင်ပြေသည်။
ပုံမှန်အားဖြင့်ပိတ်ဆို့ခြင်း mode သည်အတိုင်းအလိုရှိစွာစောင့်ဆိုင်းနေလိမ့်မည်ဖြစ်သော်လည်းအစီအစဉ်ကိုအမြဲတမ်းပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်စောင့်ဆိုင်းနေသည့်အချိန်ကိုကန့်သတ်ရန် socket ၏အချိန်ကုန်ချိန်ညှိမှုကိုကိုက်ညီရန်အသုံးပြုနိုင်သည်။
// ဖတ်ရန်အချိန်ကုန်ကိုသတ်မှတ်ပါ5စက်ဏန့်,အချိန်ကိုရေးပါ5စက်ဏန့်
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 5, 'usec' => 0]);
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ['sec' => 5, 'usec' => 0]);
မည်သည့်အဆင့်ကိုပိတ်ဆို့ခြင်းကိုဆုံးဖြတ်ရန်အတွက်သော့ခတ် socket စစ်ဆင်ရေးတစ်ခုချင်းစီမတိုင်မီနှင့်အပြီးပုံနှိပ်ထုတ်ဝေသည်။
echo "ဒေတာကိုဖတ်ရှုဖို့အဆင်သင့်...\n";
$data = socket_read($socket, 1024);
if ($data === false) {
echo "ဖတ်ရန်မအောင်မြင်ပါ,အမှား:" . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "အောင်မြင်စွာဖတ်ပါ,ကေြနပ်သော:" . $data . "\n";
}
ပိတ်ဆို့ခြင်း mode မှာ, socket operable ရှိမရှိမသေချာပါကသင် status ကိုဆုံးဖြတ်ရန် Socket_select ကို ပထမ ဦး ဆုံးအသုံးပြုနိုင်ပါတယ်။
$read = [$socket];
$write = null;
$except = null;
$tv_sec = 10; // 10စက်ဏန့်ခဏပွဲရပ်ခြင်း
$result = socket_select($read, $write, $except, $tv_sec);
if ($result === false) {
echo "select အမှားတစ်ခုဖြစ်ပွားခဲ့သည်:" . socket_strerror(socket_last_error()) . "\n";
} elseif ($result === 0) {
echo "select ခဏပွဲရပ်ခြင်း,ဖတ်ရန်အချက်အလက်မရှိပါ\n";
} else {
echo "socket ဖတ်နိုင်သော,ဒေတာကိုဖတ်ရှုဖို့အဆင်သင့်\n";
$data = socket_read($socket, 1024);
echo "读取ကေြနပ်သော:" . $data . "\n";
}
အောက်ပါဥပမာသည် client socket တစ်ခုကိုဖန်တီးနည်းကိုပြသသည်။ client socket mode ကိုဖန်တီးရန်, အချိန်ကုန်များနှင့်မှတ်တမ်းများကိုပေါင်းစပ်။ မှတ်တမ်းများနှင့် socket ၏ debug ကို။
<?php
// ဖန်တီး TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create ဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n");
}
// ဆာဗာကိုဆက်သွယ်ပါ(ဒီမှာအသုံးပြုခဲ့သည် gitbox.net ဥပမာဒိုမိန်းအမည်အဖြစ်)
$server = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $server, $port)) {
die("socket_connect ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
if (!socket_set_block($socket)) {
die("socket_set_block ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "blocking mode ကိုသတ်မှတ်ထားသည်\n";
// 设置接收ခဏပွဲရပ်ခြင်း5စက်ဏန့်,အဆုံးမဲ့ပိတ်ဆို့မှုကိုရှောင်ကြဉ်ပါ
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 5, 'usec' => 0]);
// ပေးပို့ HTTP GET မေးမြန်း
$request = "GET / HTTP/1.1\r\nHost: $server\r\nConnection: Close\r\n\r\n";
socket_write($socket, $request);
echo "မေးမြန်း已ပေးပို့,တုံ့ပြန်မှုကိုစတင်ဖတ်ပါ...\n";
// တုံ့ပြန်မှုဒေတာကိုဖတ်ပါ
$response = '';
while (true) {
$buf = socket_read($socket, 2048);
if ($buf === false) {
echo "读取အမှား: " . socket_strerror(socket_last_error($socket)) . "\n";
break;
} elseif ($buf === '') {
// အဝေးမှဆက်သွယ်မှုကိုပိတ်ပါ
echo "ဝေးလံခေါင်သီဆက်သွယ်မှုပိတ်ထားသည်\n";
break;
}
$response .= $buf;
}
echo "响应ကေြနပ်သော:\n";
echo $response;
socket_close($socket);
?>
socket_set_set_sc_block ဖြင့်ပိတ်ဆို့ခြင်း mode ကို setting လုပ်ပြီးနောက်ဖတ်ပြီးရေးခြင်း function သည်ပြီးစီးသည်အထိသို့မဟုတ်အမှားတစ်ခုဖြစ်ပေါ်သည်အထိစောင့်ဆိုင်းလိမ့်မည်။
အချိန်ကုန်ခံချိန်ညှိချက်များနှင့်မှတ်တမ်း output များကိုပေါင်းစပ်ပြီး debugging ကိုကူညီနိုင်သည်။
Socket_select ကို အသုံးပြုခြင်း Socket Status ကိုဆုံးဖြတ်ရန် Socket_select ကိုအသုံးပြုခြင်းသည် debugging နှင့် control တို့ကိုတိုးတက်စေနိုင်သည်။
လက်တွေ့တွင်ပိုမိုကေအတ်ခြေလှမ်းသတင်းအချက်အလက်များကိုပုံနှိပ်ခြင်းနှင့်ပိတ်ဆို့ခြင်းအချက်များအားခွဲခြမ်းစိတ်ဖြာခြင်းများကိုခွဲခြမ်းစိတ်ဖြာခြင်းသည်ပြ the နာကိုဖြေရှင်းရန်သော့ချက်ဖြစ်သည်။
အထက်ဖော်ပြပါနည်းလမ်းများမှတဆင့်ပိတ်ဆို့ခြင်း mode တွင် socket building mode တွင် socket building သည် network conferencer ၏တည်ငြိမ်မှုနှင့်ယုံကြည်စိတ်ချရမှုကိုသေချာစေရန်ထိရောက်စွာ debugged လုပ်နိုင်သည်။