PHP တွင် Socket Programming သည် Network Communication ကိုနားလည်ရန်အခြေခံနည်းလမ်းတစ်ခုဖြစ်သည်။ ပုံမှန်အားဖြင့် Socketets သည်ပိတ်ဆို့ခြင်းမဟုတ်နိုင်ပါ။ ဆိုလိုသည်မှာအချက်အလက်မရှိပါကအချက်အလက်များသည်အချက်အလက်များကိုစောင့်ဆိုင်းနေရန်စောင့်ဆိုင်းနေသည့်အချိန်တွင်ချက်ချင်းပြန်ပို့သည်။ Blocking Socket သည်ဒေတာများကိုဖတ်နေစဉ်အချက်အလက်များကိုဖတ်နေစဉ်အချက်အလက်များကိုဖတ်နေစဉ်အစီအစဉ်ကိုစောင့်ဆိုင်းနေမည်ဖြစ်ပြီးရိုးရှင်းသောထပ်တူချက်တင်စကားပြောပရိုဂရမ်ကိုအကောင်အထည်ဖော်ရန်သင့်တော်သည်။
ဤဆောင်းပါးသည် Php ၏ Socket_set_set_Set_Set_Set_BEST_BESTOCK function ကိုအသုံးပြုနည်းကို socket လုပ်ရန်နှင့်ဤအပေါ် အခြေခံ. ရိုးရှင်းသောပိတ်ဆို့ခြင်းအစီအစဉ်ဥပမာကိုအကောင်အထည်ဖော်ရန်မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။
Blocking Socket ဆိုသည်မှာစာဖတ်ခြင်းသို့မဟုတ်ရေးဆွဲသည့်အခါဒေတာများရောက်ရှိခြင်းသို့မဟုတ်ခွဲစိတ်ကုသမှုပြုလုပ်ရာတွင်အချက်အလက်များသို့မဟုတ်ခွဲစိတ်ကုသမှုပြီးဆုံးသည်အထိခေတ္တရပ်တန့်ရန်နှင့်စောင့်ဆိုင်းခြင်းအားခေတ္တစောင့်ဆိုင်းခြင်းအားရည်ညွှန်းသည်။ ဤနည်းလမ်းသည်ပြီးစီးရန်လွယ်ကူပြီးရှင်းလင်းသောယုတ္တိဗေဒကိုရှင်းရှင်းလင်းလင်းဖော်ပြရန်လွယ်ကူသည်။
ဆန့်ကျင်ဘက်အနေဖြင့်ပိတ်ဆို့ခြင်းမဟုတ်သော socket များကယုတ္တိနည်းကောင်းမွန်သောအစီအစဉ်များအတွက်ပိုမိုသင့်တော်သောဖြစ်ရပ်များသို့မဟုတ်ပြတ်တောင်းပြတ်တောင်းစစ်ဆင်ရေးများလိုအပ်သည်။
Socket_set_Block သည် Socket Blocking Mode ကိုသတ်မှတ်သည့် PHP တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်ချက်ကိုဖုန်းဆက်ပြီးနောက် Socket သည်ပိတ်ဆို့ခြင်းအခြေအနေသို့ပြောင်းသွားလိမ့်မည်။
function ရှေ့ပြေးပုံစံ:
bool socket_set_block(resource $socket)
$ socket : သတ်မှတ်ထားရန်လိုအပ်သည့် socket အရင်းအမြစ်
ပြန်လာတန်ဖိုး - အောင်မြင်မှုအတွက် စစ်မှန်တဲ့ ပြန်လာပါ, ပျက်ကွက်မှုအတွက် မှားယွင်းပါ
အောက်တွင်ရိုးရှင်းသောပိတ်ဆို့ခြင်း socket chat server ၏ဥပမာတစ်ခုဖြစ်သည်။ client သည်ဆက်သွယ်မှုပြီးနောက်မက်ဆေ့ခ်ျများပို့နိုင်သည်။
<?php
$host = "0.0.0.0";
$port = 12345;
// ဖန်တီး Socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($sock === false) {
die("socket_create() ဆုံးရှုံး: " . socket_strerror(socket_last_error()));
}
// လိပ်စာနှင့်ဆိပ်ကမ်းချည်နှောင်ခြင်း
if (!socket_bind($sock, $host, $port)) {
die("socket_bind() ဆုံးရှုံး: " . socket_strerror(socket_last_error($sock)));
}
// ဆိပ်ကမ်းကိုနားထောင်ပါ
if (!socket_listen($sock, 5)) {
die("socket_listen() ဆုံးရှုံး: " . socket_strerror(socket_last_error($sock)));
}
echo "ဆာဗာစတင်ခြင်း,စောင့်ရေှာက် {$host}:{$port}...\n";
// client ဆက်သွယ်မှုကိုလက်ခံပါ
$client = socket_accept($sock);
if ($client === false) {
die("socket_accept() ဆုံးရှုံး: " . socket_strerror(socket_last_error($sock)));
}
// client ကိုတက် setting Socket ပိတ်ဆို့ mode ကို၌တည်၏
socket_set_block($client);
echo "client connection အောင်မြင်သောဖြစ်ပါတယ်,မက်ဆေ့ခ်ျကိုစောင့်ဆိုင်း...\n";
while (true) {
// client data ၏စာဖတ်ခြင်းပိတ်ဆို့ခြင်း
$data = socket_read($client, 2048, PHP_NORMAL_READ);
if ($data === false) {
echo "socket_read() ဆုံးရှုံး: " . socket_strerror(socket_last_error($client)) . "\n";
break;
}
$data = trim($data);
if ($data === '') {
continue;
}
echo "တစ် ဦး client ကိုမက်ဆေ့ခ်ျကိုလက်ခံရရှိခဲ့သည်: $data\n";
if ($data === 'quit') {
echo "client ကို disconnection\n";
break;
}
// client ကိုမှမက်ဆေ့ခ်ျကိုပဲ့တင်သံ
$response = "ဆာဗာကိုလက်ခံရရှိခဲ့သည်: $data\n";
socket_write($client, $response, strlen($response));
}
// ရုပ်သိမ်းခြင်း Socket ဆက်
socket_close($client);
socket_close($sock);
?>
အထက်ပါကုဒ်ကို server.php အဖြစ်သိမ်းပြီး command line တွင် run ပါ။
php server.php
Telnet သို့မဟုတ်အခြား TCP client ကို သုံး. ဆက်သွယ်ပါ။
telnet gitbox.net 12345
(ဤဥပမာတွင် Port တွင် 12345 ဖြစ်ပြီးဒိုမိန်းအမည်ဥပမာကို GitBox.net သို့ပြောင်းလဲသွားသည်။
မက်ဆေ့ခ်ျတစ်ခုရိုက်ထည့်ပါ, ဆာဗာသည်သင်၏ input ကိုပိတ်ဆို့ပြီးမက်ဆေ့ခ်ျကိုလက်ခံရရှိပြီးနောက်အတည်ပြုရန်ပြန်လာလိမ့်မည်။
disconnect မှ unit ရိုက် ထည့်ပါ။
Socket_set_Set_Block ကိုအသုံးပြုပြီး Socket ကိုပိတ်ခြင်းကိုပိတ်ထားရန်အလွန်အဆင်ပြေသည်, ရိုးရှင်းသော synchronous chat logic ကိုဖွင့်နိုင်သည်။ ပရိုဂရမ်ကိုပိတ်ဆို့ခြင်းပရိုဂရမ်းမင်းသည်စတင်သူများအတွက်သင့်တော်သည်။
PHP Socke Programming အကြောင်းပိုမိုသိရှိလိုပါကသင်သွားရောက်ကြည့်ရှုနိုင်သည်။
https://gitbox.net/manual/socket