Network Prockamming အတွက် PHP အတွက် PHP ကိုအသုံးပြုသောအခါ client connection များကိုလက်ခံသည့် core function ဖြစ်သည်။ DOS (0 န်ဆောင်မှုငြင်းပယ်မှုငြင်းပယ်ခြင်း) ၏မျက်နှာသည်များသောအားဖြင့် angearkers များသည်များသောအားဖြင့်အန္တရာယ်ရှိသောဆက်သွယ်မှုတောင်းဆိုမှုများကိုအသုံးပြုလေ့ရှိပြီး, ဤဆောင်းပါးသည် socket_accept () မှလက်ခံသောဆက်သွယ်မှုအများဆုံးအရေအတွက်ကိုကန့်သတ်ခြင်းဖြင့်ဆာဗာကိုမည်သို့ထိထိရောက်ရောက်ဆွဲချခြင်းမှကာကွယ်ရန်မည်သို့ထိရောက်စွာတားဆီးရမည်ကိုရှင်းပြပါမည်။
DOS တိုက်ခိုက်မှုများတွင်တိုက်ခိုက်သူသည်ဆာဗာ၏တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုများကိုဖြည့်ဆည်းပေးသည့်တစ်ပြိုင်နက်တည်းဆက်သွယ်မှုများစွာကိုဖန်တီးသည်။ ဆက်သွယ်မှုအများဆုံးအရေအတွက်ကိုကန့်သတ်ခြင်းနှင့်ဆာဗာသည်အရင်းအမြစ်ခွင့်ပြုချက်အတွင်းရှိ 0 န်ဆောင်မှုခံယူသူ၏ဆက်သွယ်မှုအချို့ကိုသာကိုင်တွယ်နိုင်ကြောင်းသေချာစေရန်ဤတိုက်ခိုက်မှု၏သက်ရောက်မှုကိုထိရောက်စွာလျှော့ချနိုင်သည်။
လက်ရှိထူထောင်ထားသောဆက်သွယ်မှုအရေအတွက်ကိုရေတွက်ရန် variable များကိုသုံးပါ။
ဆက်သွယ်မှုအသစ်ကိုလက်ခံရရှိသည့်အခါလက်ရှိဆက်သွယ်မှုနံပါတ်သည်ကန့်သတ်ချက်ထက်ကျော်လွန်ခြင်းရှိ / မရှိဆုံးဖြတ်သည်။
ကန့်သတ်ချက်ကိုကျော်လွန်သွားသည့်အခါဆက်သွယ်မှုကိုငြင်းပယ်ပါ ။
ဆက်သွယ်မှုကိုပိတ်ထားသည့်အခါ connection count ကိုအချိန်မီလျှော့ချပါ။
အောက်ပါကုဒ်သည် PHP တွင် Socket_Acception တွင်အမြင့်ဆုံးဆက်သွယ်မှုကန့်သတ်ချက်ကိုမည်သို့အကောင်အထည်ဖော်ရမည်ဟုထင်မြင်သည်။
<?php
set_time_limit(0);
error_reporting(E_ALL);
$address = '0.0.0.0';
$port = 12345;
$maxConnections = 100;
$currentConnections = 0;
// ဖန်တီး TCP Socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $address, $port) or die('binding ပျက်ကွက်');
socket_listen($sock);
echo "ဆာဗာစတင်ခြင်း,စောင့်ရေှာက် {$address}:{$port}\n";
$clients = [];
while (true) {
// ဆက်သွယ်မှုအများဆုံးအရေအတွက်ကိုကျော်လွန်ခြင်းရှိမရှိဆုံးဖြတ်ရန်
if ($currentConnections < $maxConnections) {
// ပိတ်ဆို့ခြင်းမဟုတ်သော mode သည်ဆက်သွယ်မှုအသစ်များကိုလက်ခံသည်
socket_set_nonblock($sock);
$client = @socket_accept($sock);
if ($client !== false) {
// ဆက်သွယ်မှုအသစ်အောင်မြင်ခဲ့သည်,တ ဦး တည်းရေတွက်
$currentConnections++;
$clients[] = $client;
// client ကိုတက် settingsocketပိတ်ဆို့ခြင်းမဟုတ်ပါ
socket_set_nonblock($client);
echo "ဖောက်သည်အသစ်,လက်ရှိဆက်သွယ်မှုနံပါတ်: $currentConnections\n";
}
} else {
// ဆက်သွယ်မှုအများဆုံးအရေအတွက်ကျော်လွန်,ဆက်သွယ်မှုအသစ်ကိုငြင်းပယ်ပါ(optional ကိုစောင့်ဆိုင်းအချိန်)
usleep(100000); // 100ms
}
// Connected clients များမှအချက်အလက်များကိုလုပ်ဆောင်ရန်မဲရုံများ
foreach ($clients as $key => $clientSocket) {
$data = @socket_read($clientSocket, 2048, PHP_NORMAL_READ);
if ($data === false) {
// ြငင်းခုံခြင်း,client ကိုဖယ်ရှားပါ
socket_close($clientSocket);
unset($clients[$key]);
$currentConnections--;
echo "client ကိုအဆက်ပြတ်,လက်ရှိဆက်သွယ်မှုနံပါတ်: $currentConnections\n";
continue;
} elseif ($data !== '') {
$data = trim($data);
if ($data === 'quit') {
// client ကိုတက်ကြွစွာအဆက်ပြတ်
socket_close($clientSocket);
unset($clients[$key]);
$currentConnections--;
echo "client ကိုတက်ကြွစွာအဆက်ပြတ်နေသည်,လက်ရှိဆက်သွယ်မှုနံပါတ်: $currentConnections\n";
continue;
}
// client ကိုမှပေးပို့သောလုပ်ငန်းစဉ်အချက်အလက်များကို
$response = "ဆာဗာကိုလက်ခံရရှိခဲ့သည်: {$data}\n";
socket_write($clientSocket, $response, strlen($response));
}
}
usleep(50000); // လေှျာ့ပေါ့CPUနေထိုင်ခြင်း
}
?>
လက်ရှိတက်ကြွသောဆက်သွယ်မှုအရေအတွက်ကိုမှတ်တမ်းတင်ရန် $ curralconnections ကို သုံးပါ။
call socket_accept_Accept () ဆက်သွယ်မှုအများဆုံးအရေအတွက်ကိုမကျော်လွန်သောအခါဆက်သွယ်မှုအသစ်များကိုလက်ခံရရှိရန်သာဖြစ်သည်။
ဆက်သွယ်မှုအသစ်ကိုဖန်တီးပြီးသည်နှင့် client socket ကို $ clients array သို့သိမ်းဆည်းပြီးပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသတ်မှတ်ပါ။
$ client များ မဲရုံများဖြင့် 0 န်ဆောင်မှုခံယူသူအချက်အလက်များကိုဖတ်ရှုပြီးတုန့်ပြန်မှုအပြီးတွင်ဆက်လက်နားထောင်ခြင်းကိုပြုလုပ်ပါ။
အကယ်. client သည် quit command ကိုအဆက်ဖြတ်ခြင်းသို့မဟုတ်ပို့လျှင် socket ကိုပိတ်ပြီး connection connection ကိုလျှော့ချပါ။
CPU overcation ကိုလျှော့ချရန် USEEEP () ကိုသုံးပါ။
အချိန်ကုန်ခံခန်း - client connection ပျင်းရိအချိန်ကိုစစ်ဆေးပါ။
IP ဆက်သွယ်မှုအရေအတွက်ကိုကန့်သတ်ထားပါ ။
Firewall ကိုအသုံးပြုခြင်း - ဆာဗာအဆင့်မှာချွင်းချက်ချိတ်ဆက်မှုများကိုကန့်သတ်ပါ။
Load Balancing ကိုသုံးပါ ။
စောင့်ကြည့်လေ့လာခြင်းမှတ်တမ်း - အချိန်မီပုံမှန်မဟုတ်သောအသွားအလာကိုရှာဖွေပါ။
PHP Socket Server ရှိဆက်သွယ်မှုအများဆုံးအရေအတွက်ကိုကန့်သတ်ခြင်းအားဖြင့် DOS တိုက်ခိုက်မှုများကိုထိရောက်စွာခုခံတွန်းလှန်နိုင်ပြီးဆာဗာအရင်းအမြစ်များကိုအန္တရာယ်ရှိသောပျောက်ကွယ်သွားခြင်းကိုရှောင်ရှားနိုင်သည်။ အခြားလုံခြုံရေးအစီအမံများနှင့်ပေါင်းစပ်ပြီး၎င်းသည်ဆာဗာအတွက်ခိုင်မာသောကာကွယ်မှုပေးပြီး 0 န်ဆောင်မှုများ၏တည်ငြိမ်မှုကိုသေချာစေသည်။