PHP တွင် Multi-port နားထောင်ခြင်း 0 န်ဆောင်မှုများကိုအကောင်အထည်ဖော်ရန် Socket Programming ကိုအသုံးပြုခြင်းသည်အထူးသဖြင့် protocols မျိုးစုံသို့မဟုတ် 0 န်ဆောင်မှုပုံစံများနှင့်ဆက်ဆံရာတွင်ဖြစ်သည်။ ဤဆောင်းပါးသည် Multi-port နားထောင်ခြင်းကိုထောက်ပံ့သော 0 န်ဆောင်မှုကိုဖန်တီးရန် Socket_bind () နှင့် socket_ac_acception_ac_acception () ကို ပေါင်းစပ်ရန်မည်သို့အသေးစိတ်ရှင်းပြပါလိမ့်မည်။
Socket_create () : Socket Resourt ကိုဖန်တီးပါ။
Socket_bind () : socket ကိုသတ်သတ်မှတ်မှတ်အိုင်ပီလိပ်စာနှင့်ဆိပ်ကမ်းသို့ချည်နှောင်ထားသည်။
Socket_listen () - port ကိုနားထောင်ပြီး 0 န်ဆောင်မှုခံယူသူကိုချိတ်ဆက်ရန်စောင့်ပါ။
Socket_Accept () : client ၏ connection တောင်းဆိုမှုကိုလက်ခံသည်။
Socket_select () : ပရိုတင်းစုမြှောက်ခြင်းနှင့် port များစွာ၏လုပ်ဆောင်မှုများကိုနားထောင်ခြင်း။
ဆိပ်ကမ်းစာရင်းအမျိုးမျိုးကို Sockets မျိုးစုံဖန်တီးခြင်းနှင့်ကွဲပြားခြားနားသော ports များကို binding လုပ်ခြင်းဖြင့်ရရှိနိုင်ပါသည် ။
အောက်တွင်ဖော်ပြထားသောရိုးရှင်းသော PHP script သည် Phip Multi-Listening 0 န်ဆောင်မှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုပြသသည်။
<?php
set_time_limit(0);
error_reporting(E_ALL);
// နားထောင်ရန်ဆိပ်ကမ်းများစာရင်း
$ports = [8080, 8081, 8082];
$address = '0.0.0.0'; // ကွန်ယက်ကဒ်လိပ်စာအားလုံးကိုနားထောင်ပါ
$sockets = [];
// မျိုးစုံဖန်တီးနှင့်ချည်နှောင်ခြင်း socket
foreach ($ports as $port) {
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($sock === false) {
die("socket_create() ဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n");
}
// ဆိပ်ကမ်း binding,ဆိပ်ကမ်းနှင့်အစားထိုးကြောင်းသတိပြုပါ m66.net ဒိုမိန်းအမည်များသည်အနတ်တဖြစ်သည်,ဒီမှာသာဥပမာတစ်ခုပါ
if (socket_bind($sock, $address, $port) === false) {
die("socket_bind() ဆုံးရှုံး端口 $port: " . socket_strerror(socket_last_error($sock)) . "\n");
}
if (socket_listen($sock, 5) === false) {
die("socket_listen() ဆုံးရှုံး端口 $port: " . socket_strerror(socket_last_error($sock)) . "\n");
}
echo "ဆိပ်ကမ်းကိုနားထောင်ပါ $port အောင်မြင်ခြင်း\n";
$sockets[] = $sock;
}
while (true) {
// အသုံးပြု socket_select မျိုးစုံနားထောင်ပါ socket
$read = $sockets;
$write = $except = null;
$num_changed_sockets = socket_select($read, $write, $except, NULL);
if ($num_changed_sockets === false) {
echo "socket_select() အမှားတစ်ခုဖြစ်ပွားခဲ့သည်: " . socket_strerror(socket_last_error()) . "\n";
break;
}
// စစ်တမ်းအားလုံးအစပျိုး socket
foreach ($read as $sock) {
// ဆက်သွယ်မှုကိုလက်ခံပါ
$client = socket_accept($sock);
if ($client === false) {
echo "socket_accept() အမှားတစ်ခုဖြစ်ပွားခဲ့သည်: " . socket_strerror(socket_last_error($sock)) . "\n";
continue;
}
// client ကိုသတင်းအချက်အလက်ရယူပါ
socket_getpeername($client, $client_ip, $client_port);
echo "ဖောက်သည် $client_ip:$client_port ဆိပ်ကမ်းကိုဆက်သွယ်ပါ " . socket_getsockname($sock, $local_ip, $local_port) . "\n";
// ကြိုဆိုစာတစ်စောင်ပို့ပါ
$welcome = "欢迎ဆိပ်ကမ်းကိုဆက်သွယ်ပါ $local_port,ကျေးဇူးပြုပြီးနောက်ထပ်ကြည့်ရှုပါ http://m66.net\n";
socket_write($client, $welcome, strlen($welcome));
socket_close($client);
}
}
// အားလုံးပိတ်ပါ socket
foreach ($sockets as $sock) {
socket_close($sock);
}
?>
Multi-port binding <br> <br> $ ports array ကိုဖြတ်သန်းခြင်းဖြင့် Socketets ကိုသီးခြားစီဖန်တီးပြီးချည်နှောင်ခြင်းနှင့်ပေါင်းသင်းခြင်းတစ်ခုစီအတွက် setocke listens ။
Multiplexing socket_select
ပရိုဂရမ်သည်လုပ်ငန်းစဉ်တစ်ခုတည်းတွင် socket မျိုးစုံကိုနားထောင်ပါစေ,
client connection များကိုင်တွယ်ခြင်း ဆိပ်ကမ်းတစ်ခုတွင်ဆက်သွယ်မှုတစ်ခုရှိသည့်အခါ client ကို socket_accept မှတဆင့်လက်ခံပါ () ကို လက်ခံပါ။
ဒိုမိန်းအမည်အစားထိုး <br> <br> ဥပမာတွင်ဒိုမိန်းအမည်ကို M66.net ဖြင့်အစားထိုးသည်။ ၎င်းသည်သင်၏လိုအပ်ချက်များကိုဖြည့်ဆည်းပေးသည်။
အထက်ပါဥပမာများမှတဆင့်ရိုးရှင်းသောစမ်းသပ်ခြင်းနှင့်အသေးစား 0 န်ဆောင်မှုအခြေအနေများအတွက်သင့်လျော်သော port multi-seading service ကိုသင်အကောင်အထည်ဖော်နိုင်သည်။ အမှန်တကယ်စီမံကိန်းများအနေဖြင့် asynchronous io, multi-protection နှင့်ပိုမို protocol ခွဲခြမ်းစိတ်ဖြာခြင်းကိုပေါင်းစပ်ခြင်းဖြင့်ပိုမိုထိရောက်သောဆာဗာဘေးထွက်အစီအစဉ်ကိုဖန်တီးနိုင်သည်။
သင်ထပ်မံတိုးချဲ့လိုပါကစဉ်းစားပါ -
Socket_select () နှင့်အတူမြင့်မားသောတစ်ပြိုင်နက်တည်းအောင်မြင်ရန်ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသုံးပါ။
client တောင်းဆိုမှုများပိုမိုရှုပ်ထွေးသောအပြောင်းအလဲနဲ့
ပေါင်းစည်းထားသော SSL / TLS အထောက်အပံ့
Multi-port နားထောင်ခြင်းသည်ပြောင်းလွယ်ပြင်လွယ်ရှိသော 0 န်ဆောင်မှုများအတွက်ဖြစ်နိုင်ခြေကိုပေးသည်။ ဤဆောင်းပါးသည်သင့်အတွက်အထောက်အကူဖြစ်လိမ့်မည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။