လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> socket_bind နှင့် တွဲဖက်. Multi-port နားထောင်ခြင်း 0 န်ဆောင်မှုတစ်ခုကိုဖန်တီးပါ ()

socket_bind နှင့် တွဲဖက်. Multi-port နားထောင်ခြင်း 0 န်ဆောင်မှုတစ်ခုကိုဖန်တီးပါ ()

M66 2025-05-25

PHP တွင် Multi-port နားထောင်ခြင်း 0 န်ဆောင်မှုများကိုအကောင်အထည်ဖော်ရန် Socket Programming ကိုအသုံးပြုခြင်းသည်အထူးသဖြင့် protocols မျိုးစုံသို့မဟုတ် 0 န်ဆောင်မှုပုံစံများနှင့်ဆက်ဆံရာတွင်ဖြစ်သည်။ ဤဆောင်းပါးသည် Multi-port နားထောင်ခြင်းကိုထောက်ပံ့သော 0 န်ဆောင်မှုကိုဖန်တီးရန် Socket_bind () နှင့် socket_ac_acception_ac_acception () ကို ပေါင်းစပ်ရန်မည်သို့အသေးစိတ်ရှင်းပြပါလိမ့်မည်။

1 ။ အခြေခံမူများ

  • Socket_create () : Socket Resourt ကိုဖန်တီးပါ။

  • Socket_bind () : socket ကိုသတ်သတ်မှတ်မှတ်အိုင်ပီလိပ်စာနှင့်ဆိပ်ကမ်းသို့ချည်နှောင်ထားသည်။

  • Socket_listen () - port ကိုနားထောင်ပြီး 0 န်ဆောင်မှုခံယူသူကိုချိတ်ဆက်ရန်စောင့်ပါ။

  • Socket_Accept () : client ၏ connection တောင်းဆိုမှုကိုလက်ခံသည်။

  • Socket_select () : ပရိုတင်းစုမြှောက်ခြင်းနှင့် port များစွာ၏လုပ်ဆောင်မှုများကိုနားထောင်ခြင်း။

ဆိပ်ကမ်းစာရင်းအမျိုးမျိုးကို Sockets မျိုးစုံဖန်တီးခြင်းနှင့်ကွဲပြားခြားနားသော ports များကို binding လုပ်ခြင်းဖြင့်ရရှိနိုင်ပါသည်

2 ။ ကုဒ်သင်္ကေတ

အောက်တွင်ဖော်ပြထားသောရိုးရှင်းသော 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);
}
?>

3 ။ ကုဒ်ဖော်ပြချက်

  1. Multi-port binding <br> <br> $ ports array ကိုဖြတ်သန်းခြင်းဖြင့် Socketets ကိုသီးခြားစီဖန်တီးပြီးချည်နှောင်ခြင်းနှင့်ပေါင်းသင်းခြင်းတစ်ခုစီအတွက် setocke listens ။

  2. Multiplexing socket_select
    ပရိုဂရမ်သည်လုပ်ငန်းစဉ်တစ်ခုတည်းတွင် socket မျိုးစုံကိုနားထောင်ပါစေ,

  3. client connection များကိုင်တွယ်ခြင်း ဆိပ်ကမ်းတစ်ခုတွင်ဆက်သွယ်မှုတစ်ခုရှိသည့်အခါ client ကို socket_accept မှတဆင့်လက်ခံပါ () ကို လက်ခံပါ။

  4. ဒိုမိန်းအမည်အစားထိုး <br> <br> ဥပမာတွင်ဒိုမိန်းအမည်ကို M66.net ဖြင့်အစားထိုးသည်။ ၎င်းသည်သင်၏လိုအပ်ချက်များကိုဖြည့်ဆည်းပေးသည်။

4 ။ အကျဉ်းချုပ်

အထက်ပါဥပမာများမှတဆင့်ရိုးရှင်းသောစမ်းသပ်ခြင်းနှင့်အသေးစား 0 န်ဆောင်မှုအခြေအနေများအတွက်သင့်လျော်သော port multi-seading service ကိုသင်အကောင်အထည်ဖော်နိုင်သည်။ အမှန်တကယ်စီမံကိန်းများအနေဖြင့် asynchronous io, multi-protection နှင့်ပိုမို protocol ခွဲခြမ်းစိတ်ဖြာခြင်းကိုပေါင်းစပ်ခြင်းဖြင့်ပိုမိုထိရောက်သောဆာဗာဘေးထွက်အစီအစဉ်ကိုဖန်တီးနိုင်သည်။

သင်ထပ်မံတိုးချဲ့လိုပါကစဉ်းစားပါ -

  • Socket_select () နှင့်အတူမြင့်မားသောတစ်ပြိုင်နက်တည်းအောင်မြင်ရန်ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသုံးပါ။

  • client တောင်းဆိုမှုများပိုမိုရှုပ်ထွေးသောအပြောင်းအလဲနဲ့

  • ပေါင်းစည်းထားသော SSL / TLS အထောက်အပံ့

Multi-port နားထောင်ခြင်းသည်ပြောင်းလွယ်ပြင်လွယ်ရှိသော 0 န်ဆောင်မှုများအတွက်ဖြစ်နိုင်ခြေကိုပေးသည်။ ဤဆောင်းပါးသည်သင့်အတွက်အထောက်အကူဖြစ်လိမ့်မည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။