လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP တွင်ပိတ်ဆို့ခြင်းဆာဗာတစ်ခုကိုဖန်တီးပါ။ Socket_create မှ Socket_set_Block သို့

PHP တွင်ပိတ်ဆို့ခြင်းဆာဗာတစ်ခုကိုဖန်တီးပါ။ Socket_create မှ Socket_set_Block သို့

gitbox 2025-05-26

PHP တွင် Socket-bocked socketing server ကိုအကောင်အထည်ဖော်ခြင်း PHP တွင်အခြေခံကွန်ယက်ဆက်သွယ်ရေးနိယာမကိုနားလည်ရန်ကူညီနိုင်သည်။ ပိတ်ဆို့ခြင်း mode ကိုဆိုလိုသည်မှာဒေတာများကိုပြုပြင်မွမ်းမံခြင်းသို့မဟုတ်ဆက်သွယ်မှုအဆင်သင့်မဖြစ်သေးသည်အထိဆာဗာသည်မဖတ်မချင်းစောင့်ဆိုင်းလိမ့်မည်ဟုဆိုလိုသည်။ ဤဆောင်းပါးသည် PHP ၏ Socket extension မှ sockets များဖန်တီးခြင်းမှ sockets များကိုပိတ်ဆို့ခြင်း mode ကိုတည်ဆောက်ရန်နှင့်ရိုးရှင်းသောပိတ်ဆို့ခြင်းဆာဗာကိုတည်ဆောက်ရန် Socke Socket extension ကိုတစ်ဆင့်ချင်းဤဆောင်းပါးစတင်မည်ဖြစ်သည်။

1 ။ အဘိတ်: Socket extension ကို enable လုပ်ထားတာသေချာပါစေ

ပထမ ဦး စွာ PHP ပတ်ဝန်းကျင်တွင် Socket extension ကိုသေချာအောင်လုပ်ပါ။ PHPP.ini (ရှိလျှင်) တွင်အောက်ပါလိုင်းကိုရှာဖွေခြင်းနှင့်မပေါင်းသင်းပါ။

 extension=sockets

Extension ကိုဖွင့်ထားသလားစစ်ဆေးရန် Php -M command ကိုသုံးပါ။

 php -m | grep sockets

Socketets ကို သင်တွေ့နိုင်တယ်ဆိုရင် extension ကိုဖွင့်ထားတယ်။

2 ။ Socket ကိုအသုံးပြုပြီး TCP server တစ်ခုကိုဖန်တီးပါ

အောက်ပါအချက်များမှာခြေဆန်းချက်တစ်ခုဖန်တီးရန်အခြေခံအဆင့်များမှာ function တစ်ခုစီ၏အခန်းကဏ် rote ကိုမိတ်ဆက်ပေးရန်အခြေခံအဆင့်များဖြစ်သည်။

1 ။ socket တစ်ခုဖန်တီးပါ

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()) . "\n");
}

ဤနေရာတွင် IPv4 ( AF_inet ) အပေါ် အခြေခံ. TCP Socket ( Sock_Stream ) ကိုဖန်တီးနေကြသည်။

2 ။ socket options များ (optional)

port reuse ကဲ့သို့သော socket options အချို့ကိုသတ်မှတ်နိုင်သည်။

 socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

3 ။ bind socket

 $host = '0.0.0.0';
$port = 9000;
if (!socket_bind($socket, $host, $port)) {
    die("socket_bind() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

4 ။ ဆိပ်ကမ်းကိုနားထောင်ပါ

 if (!socket_listen($socket, 5)) {
    die("socket_listen() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

5 ဆိုင်းငံ့ထားဆက်သွယ်မှုတောင်းဆိုမှုများအများဆုံးအရေအတွက်ကိုဖော်ပြသည်။

3 ။ mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထား

socket_set_block ကိုအသုံးပြုပါ။

 if (!socket_set_block($socket)) {
    die("socket_set_block() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

ပိတ်ဆို့ခြင်း mode ကိုပိတ်ထားပြီးသည်နှင့်နောက်ဆက်တွဲ socket_accept_Acception , Socket_read နှင့်အခြားလုပ်ဆောင်ချက်များသည်စစ်ဆင်ရေးပြီးဆုံးသည်အထိပိတ်ဆို့လိမ့်မည်။

4 ။ connection ကိုလက်ခံပြီးဒေတာကိုဖတ်ပါ

 echo "ဆာဗာစတင်သည်,ဆိပ်ကမ်းကိုနားထောင်ပါ $port...\n";

while (true) {
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() failed: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    $input = socket_read($clientSocket, 1024);
    if ($input === false) {
        echo "socket_read() failed: " . socket_strerror(socket_last_error($clientSocket)) . "\n";
    } else {
        $input = trim($input);
        echo "မက်ဆေ့ခ်ျကိုလက်ခံရရှိခဲ့သည်: $input\n";

        $response = "မင်းဒါကိုပို့လိုက်တယ်:$input\n";
        socket_write($clientSocket, $response, strlen($response));
    }

    socket_close($clientSocket);
}

5 ။ ဆာဗာကိုပိတ်လိုက်ပါ

သင်ထွက်ရန်လိုအပ်သည့်အခါအဓိက socket ကိုပိတ်ရန်မမေ့ပါနှင့်။

 socket_close($socket);

6 ။ လက်လှမ်းမီမှုစစ်ဆေးမှု

Telnet Connection Tress ကဲ့သို့သော command line client ကိုသုံးနိုင်သည်။

 telnet gitbox.net 9000

သို့မဟုတ် Connection Testing အတွက်ရိုးရှင်းသော PHP client ကိုရေးပါ။

အကျဉ်းချုပ်

Socket_Create_Set_Set_BLOCK သို့ socket_set_block ကိုကျွန်ုပ်တို့တည်ဆောက်သည်။ ဤ mode သည်သင်ကြားခြင်း, debugging သို့မဟုတ် love-concurrencencencencencencencencencens စသည့်ရိုးရှင်းသောကွန်ယက်ဆက်သွယ်ရေးလျှောက်လွှာများအတွက်သင့်တော်သည်။ မြင့်မားသော concurrencencencencencency ဖြစ်ရပ်များအတွက်ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုအသုံးပြုရန်သို့မဟုတ်ပိုမိုထိရောက်သောဖြစ်ရပ်ကွင်းဆက်အောင်မြင်ရန် ရွေးချယ်မှု / စစ်တမ်းကောက်ယူ ရန်အကြံပြုသည်။

ဤဆောင်းပါး၏လက်တွေ့ကျသောအဆင့်များဖြင့် PHP တွင်ပိတ်ဆို့ခြင်းဆာဗာများတည်ဆောက်ခြင်းလုပ်ငန်းစဉ်တစ်ခုလုံးကိုသင်ကျွမ်းကျင်နိုင်ပြီးပိုမိုနက်ရှိုင်းသောကွန်ယက်ပရိုဂရမ်အတွက်ခိုင်မာသောအခြေခံအုတ်မြစ်ချနိုင်သည်။