လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_Accept ကို အခြေခံ. Chat Room application ရှေ့ပြေးပုံစံကိုအကောင်အထည်ဖော်ခြင်း ()

Socket_Accept ကို အခြေခံ. Chat Room application ရှေ့ပြေးပုံစံကိုအကောင်အထည်ဖော်ခြင်း ()

M66 2025-06-05

Web Programming တွင် PHP သည်များသောအား ဖြင့် HTTP တောင်းဆိုမှုများကိုကိုင်တွယ်ရန်အသုံးပြုလေ့ရှိသည်။ PHP socket prock_acception () function ကို အခြေခံ. ရိုးရှင်းသော chat application prottotype ကိုမည်သို့တည်ဆောက်ရမည်ကိုဤဆောင်းပါးတွင်ဖော်ပြထားသည်။

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

chat room ၏အခြေခံယန္တရားမှာ - ဆာဗာသည် port တစ်ခုသို့နားထောင်သည်။ clients အများစုသည် socket မှတစ်ဆင့်ဆာဗာကိုချိတ်ဆက်ထားပြီး,

2 ။ ဆာဗာကုဒ်နံပါတ်

ဆာဗာသည် Sockets, Binding ports များကိုဖန်တီးရန်, ဆက်သွယ်မှုများကိုနားထောင်ခြင်းနှင့် client connections များကိုကွင်းဆက်တွင်လက်ခံခြင်း,

 <?php
$host = '0.0.0.0';
$port = 12345;
$clients = [];

$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($server, $host, $port);
socket_listen($server);

echo "Server started on $host:$port\n";

while (true) {
    $read = $clients;
    $read[] = $server;

    $write = $except = null;

    if (socket_select($read, $write, $except, null) < 1) {
        continue;
    }

    if (in_array($server, $read)) {
        $client = socket_accept($server);
        if ($client) {
            socket_getpeername($client, $addr, $port);
            echo "Client connected: {$addr}:{$port}\n";
            $clients[] = $client;
            socket_write($client, "ချက်တင်ခန်းမှကြိုဆိုပါသည်!\n");
        }
        unset($read[array_search($server, $read)]);
    }

    foreach ($read as $sock) {
        $data = @socket_read($sock, 2048, PHP_NORMAL_READ);
        if ($data === false) {
            $index = array_search($sock, $clients);
            socket_getpeername($sock, $addr, $port);
            echo "Client disconnected: {$addr}:{$port}\n";
            unset($clients[$index]);
            socket_close($sock);
            continue;
        }

        $data = trim($data);
        if (!empty($data)) {
            socket_getpeername($sock, $addr, $port);
            $message = "[{$addr}:{$port}] ရှင်းလင်းဖေါ်ပြ: {$data}\n";

            foreach ($clients as $client) {
                if ($client !== $sock) {
                    socket_write($client, $message);
                }
            }

            echo $message;
        }
    }
}

3 ။ client အကောင်အထည်ဖော်မှုနည်းလမ်း

Client များသည် Telnet ကို သုံး. websock proxy နှင့်ချိတ်ဆက်ရန် browser များသုံးနိုင်သည်။ သို့သော်သင်သည် PHP ကို ​​အသုံးပြု. 0 န်ဆောင်မှုခံယူသူတစ် ဦး ကိုမက်ဆေ့ခ်ျများပို့ရန် Simulate လုပ်ရန်အသုံးပြုလိုပါကအောက်ပါကုဒ်ကိုသုံးနိုင်သည်။

 <?php
$host = '127.0.0.1';
$port = 12345;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, $port);

echo socket_read($socket, 2048);

while (true) {
    echo "ကျေးဇူးပြု. စာတစ်စောင်ထည့်ပါ: ";
    $msg = trim(fgets(STDIN));

    if ($msg === 'exit') {
        break;
    }

    socket_write($socket, $msg . "\n");

    $response = socket_read($socket, 2048);
    echo "မက်ဆေ့ခ်ျကိုလက်ခံရရှိခဲ့သည်: " . $response;
}

socket_close($socket);

4 ။ လက်တွေ့ကျသောအကြံပြုချက်များနှင့်တိုးချဲ့ခြင်းအတွေးအခေါ်များ

  1. Multi-process အထောက်အပံ့ - အဓိကလုပ်ငန်းစဉ်ကိုပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန် PCNTL_Fork () ကို သင်အသုံးပြုနိုင်သည်။

  2. Log Management : နောက်ပိုင်းတွင်ပြ troubl နာဖြေရှင်းခြင်းများလွယ်ကူချောမွေ့စေရန်အတွက်အကြောင်းအရာတစ်ခုစီကို timestamp တစ်ခုထည့်ပါ။

  3. အထောက်အထား - client တစ်ခုစီအတွက်အမည်ဝှက်တစ်ခုသို့မဟုတ် ID တစ်ခုကိုသတ်မှတ်ခြင်းသည်အသုံးပြုသူအတွေ့အကြုံကိုမြှင့်တင်ပေးနိုင်သည်။

  4. Front-end connection : http://m66.net/socket-proxy နှင့်ဆင်တူသော php chat အခန်းများကိုဝက်ဘ်စာမျက်နှာနှင့်ချိတ်ဆက်ပြီး http://m66.net/socket-proxy နှင့်အလားတူအသုံးပြုနိုင်သည်။

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

Socket_acception ကဲ့သို့သော PHP Socket functions များမှတဆင့်ကျွန်ုပ်တို့သည် command line ပတ် 0 န်းကျင်တွင်အခြေခံ chat service ကိုအကောင်အထည်ဖော်နိုင်သည်။ PHP သည်အချိန်နှင့်တပြေးညီဆက်သွယ်ရေးအတွက်အဓိကဘာသာစကားမဟုတ်သော်လည်း၎င်း၏နောက်ခံလုပ်ဆောင်ချက်များသည် TCP ဆက်သွယ်ရေးလုပ်ငန်းကိုဖြည့်စွက်ရန်အသုံးပြုနေဆဲဖြစ်သည်။ အကယ်. သင်ကထုတ်လုပ်မှုပတ် 0 န်းကျင်ကိုဖြန့်ဖြူးလိုပါကစွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုကိုတိုးတက်စေရန်ပိုမိုပရော်ဖက်ရှင်နယ်မက်ဆေ့ခ်ျကိုတန်းစီနှင့် asynchronous server framework ကိုပေါင်းစပ်ရန်အကြံပြုသည်။