လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Custom Protocol ဆာဗာကိုအကောင်အထည်ဖော်ရန် Socket_Accept () ကိုသုံးပါ

Custom Protocol ဆာဗာကိုအကောင်အထည်ဖော်ရန် Socket_Accept () ကိုသုံးပါ

M66 2025-05-18

စွမ်းဆောင်ရည်မြင့်မားပြီးပြောင်းလွယ်ပြင်လွယ်ရှိသောကွန်ယက် 0 န်ဆောင်မှုများကိုတည်ဆောက်ရာတွင် PHP သည် 0 က်ဘ်အပလီကေးရှင်းများတည်ဆောက်ရန်အကန့်အသတ်မရှိ, ၎င်းတွင်ကွန်ယက်ဆက်သွယ်မှုကိုကိုင်တွယ်နိုင်စွမ်းရှိသည်။ PHP ၏ Socket extension မှတဆင့်ကျွန်ုပ်တို့သည်စိတ်ကြိုက် protocol ပေါ်တွင် အခြေခံ. server-side program တစ်ခုဖန်တီးနိုင်သည်။ ဤဆောင်းပါးသည်အခြေခံမူများနှင့်ပြည့်စုံသောဥပမာများအပါအ 0 င် socket_accept ကို အသုံးပြု. စိတ်ကြိုက် protocol server ကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုအသေးစိတ်နိဒါန်းပေးမည်။

1 ။ Socket_Accept ကဘာလဲ။

Socket_Accept () သည် client များထံမှဆက်သွယ်မှုတောင်းဆိုမှုများကိုလက်ခံသည့် PHP Socket extension တွင် function တစ်ခုဖြစ်သည်။ ဆာဗာသည် Socket_create () နှင့် Socket_bind မှတဆင့်နားထောင်ခြင်းသည် socket_listen () ကို အသုံးပြုသည်။ socket_listen () ကို အသုံးပြုသည်။ client connection တစ်ခုရှိပါက client နှင့်ဆက်သွယ်ရန် socket အသစ်တစ်ခုကိုပြန်ပို့လိမ့်မည်။

အတိုချုပ်ဆိုရလျှင်, ၎င်း၏လုပ်ငန်းစဉ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

  1. Socketets ကိုဖန်တီးပါ။

  2. လိပ်စာနှင့်ဆိပ်ကမ်းကိုချည်နှောင်ခြင်း,

  3. ဆက်သွယ်မှုကိုနားထောင်ပါ။

  4. connection ကိုလက်ခံရန် ( socket_accept () );

  5. ဖောက်သည်များနှင့်ဆက်သွယ်ခြင်း,

  6. ဆက်သွယ်မှုကိုပိတ်ပါ။

2 ။ အသုံးပြုမှုမြင်ကွင်း - စိတ်ကြိုက် protocol server

ကျွန်ုပ်တို့သည် JSON format ဖြင့်တောင်းဆိုမှုတစ်ခုရရှိခြင်းနှင့်တုန့်ပြန်မှုများကိုသတ်မှတ်ထားသောပုံစံဖြင့်ပြန်ပို့ခြင်းစသည့်စိတ်ကြိုက် protocol server တစ်ခုတည်ဆောက်လိုကြောင်းဆိုပါစို့။ ဤဆာဗာသည် HTTP သို့မဟုတ်အခြားသမားရိုးကျ protocols များကိုအားမကိုးသော်လည်း TCP layer တွင်တိုက်ရိုက်ဆက်သွယ်သည်။

3 ။ ဥပမာဥပမာ - PHP Custom Protocol Server

အောက်ဖော်ပြပါသည် PHP script သည် PHP script သည် PHP script ဖြစ်သည်။ ၎င်းသည်ဒေသဆိုင်ရာဆိပ်ကမ်းသို့ 0 င်ရောက်သော json တောင်းဆိုမှုများကိုလက်ခံပြီး 0 န်ဆောင်မှုခံယူသူမှရရှိသော JSON တောင်းဆိုမှုများကိုလက်ခံသည်။

 <?php
set_time_limit(0); // script အချိန်အကြာကြီးတားဆီး

$host = '0.0.0.0';
$port = 9000;

// 1. ဖန်တီး socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
    die("socket_create() ဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n");
}

// 2. လိပ်စာနှင့်ဆိပ်ကမ်းချည်နှောင်ခြင်း
if (!socket_bind($socket, $host, $port)) {
    die("socket_bind() ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// 3. ဆက်သွယ်မှုကိုနားထောင်ပါ
if (!socket_listen($socket, 5)) {
    die("socket_listen() ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "ဆာဗာစတင်သည်,စောင့်ရေှာက် {$host}:{$port}...\n";

while (true) {
    // 4. ဆက်သွယ်မှုကိုလက်ခံပါ
    $client = socket_accept($socket);
    if ($client === false) {
        echo "socket_accept() ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    // 5. client ကိုတောင်းဆိုမှုကိုဖတ်ပါ
    $input = socket_read($client, 1024);
    $input = trim($input);

    echo "တောင်းဆိုမှုကိုလက်ခံရရှိခဲ့သည်: $input\n";

    // သုံးသပ်ကြည့်ရှုခြင်း JSON မေးမြန်း
    $request = json_decode($input, true);
    $response = [];

    if (json_last_error() === JSON_ERROR_NONE && isset($request['action'])) {
        if ($request['action'] === 'ping') {
            $response = ['status' => 'success', 'message' => 'pong'];
        } elseif ($request['action'] === 'hello') {
            $response = ['status' => 'success', 'message' => 'Hello from m66.net!'];
        } else {
            $response = ['status' => 'error', 'message' => 'အမည်မသိစစ်ဆင်ရေး'];
        }
    } else {
        $response = ['status' => 'error', 'message' => 'မေးမြန်း格式错误'];
    }

    // တုံ့ပြန်မှုတစ်ခုပို့ပါ
    $output = json_encode($response) . "\n";
    socket_write($client, $output, strlen($output));

    // Client Convice Connection
    socket_close($client);
}

// ဆာဗာကိုပိတ်ပါ socket(သီအိုရီအရ,)
socket_close($socket);
?>

4 ။ စမ်းသပ်မှုနည်းလမ်း

Telenet သို့မဟုတ် Custom Client Tools များကိုစစ်ဆေးရန်သင်အသုံးပြုနိုင်သည်။

 telnet 127.0.0.1 9000

paste input ကို:

 {"action":"ping"}

ဆာဗာသည်ပြန်လာလိမ့်မည်

 {"status":"success","message":"pong"}

ကိုလည်းပို့နိုင်ပါတယ်:

 {"action":"hello"}

တုံ့ပြန်မှုများ:

 {"status":"success","message":"Hello from m66.net!"}

5 ။ မှတ်စုဖို့အရာ

  • သွင်းအားစုများနှင့်ရလဒ်များအားလုံးသည်ပုံစံ၏ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေသင့်ပြီး JSON ကို protocol body အဖြစ်အသုံးပြုရန်အကြံပြုသည်။

  • ဤဆာဗာသည်ပိတ်ဆို့ခြင်းနှင့်လေ့လာခြင်းနှင့်အသေးစားအသုံးချပရိုဂရမ်များအတွက်သင့်တော်သည်။

  • (SWOOLE) (ဥပမာ -Stoole ကဲ့သို့သောသရုပ်ဆောင်မော်ဒယ်များ) (ဥပမာ -Stoole) ကို သုံး. ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်အသုံးပြုသင့်သည်။

  • အကယ်. 0 န်ဆောင်မှုကို Public Network သို့တပ်ဆင်ထားပါက IP Whitelist, encryption verification စသည့်လုံခြုံရေးထိန်းချုပ်မှုကိုသေချာစေရန်လိုအပ်သည်။

6 ။ နိဂုံးချုပ်

ဤဆောင်းပါးမှတစ်ဆင့် PHP Socket_Accept ကို အသုံးပြု. စိတ်ကြိုက် protocol server တစ်ခုမည်သို့ဖန်တီးရမည်ကိုသင်လေ့လာသင်ယူခဲ့သည်။ နောက်ခံ socclede socclede section မှအပြည့်အစုံဥပမာမှဤချဉ်းကပ်နည်းသည် PHP ၏လျှောက်လွှာနယ်နိမိတ်များကိုကျယ်ပြန့်စေရုံသာမကပြောင်းလွယ်ပြင်လွယ်။ ယုံကြည်စိတ်ချရသောဆက်သွယ်ရေးစွမ်းရည်များကိုလည်းတိကျစေသည်။ ဤဗိသုကာသည်ပေါ့ပါးသော 0 န်ဆောင်မှုများ,