PHP တွင် Socket_accept () function ကို client တစ်ခု၏ connection တောင်းဆိုမှုကိုလက်ခံရန်နှင့် server နှင့် server အကြားဆက်သွယ်ရေးလမ်းကြောင်းကိုကိုယ်စားပြုသည်။ သို့သော် Socket_Accept () ကို အသုံးပြုခြင်းသည်မလျော်ကန်စွာကိုင်တွယ်လျှင်သယံဇာတယိုယွင်းမှုကိုယိုစိမ့်မှုဖြစ်စေရန်လွယ်ကူသည်။ ဤဆောင်းပါးသည် Socket_Acception ပြ problem နာ () function () function တွင်အရင်းအမြစ်ယိုစိမ့်မှုပြ problem နာကိုဖြေရှင်းရန်နှင့်ဖြေရှင်းရန်မည်သို့ဖြေရှင်းနိုင်သည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
အရင်းအမြစ်ယိုစိမ့်မှုကစနစ်လည်ပတ်နေစဉ်အတွင်းအသုံးပြုသောစနစ်အရင်းအမြစ်များ (မှတ်ဉာဏ်, ဖိုင်လက်ကိုင်များ, ကွန်ယက်ချိတ်ဆက်မှုစသည်တို့) ကိုအသုံးပြုသည်။ Socket Programming အတွက် socket_accept to socket_accept to socket_accept to socket accessions () အပြည့်အဝ socket အရင်းအမြစ်များကိုမှန်ကန်စွာမပိတ်ပါက,
ဆက်သွယ်ရေးပြီးစီးခဲ့သော client socket ကိုမပိတ်နိုင်ပါ
Socket_Accept ပြီးနောက် () client connection ကိုအောင်မြင်စွာလက်ခံပြီး, Socket_Close () ကိုစီးပွားရေးယုတ္တိဗေဒကိုပြုပြင်ပြီးနောက် client socket ကိုပိတ်ပစ်ရန် Client Socket ကိုပိတ်ပစ်ရန်မခေါ်ပါ။
ပုံမှန်မဟုတ်သောထွက်ပေါက်ထွက်ပေါ်လာသောထွက်ပေါ်လာခြင်းကိုထုတ်ပြန်ခြင်းမပြုရပါ 0 န်ဆောင်မှုခံယူသူတောင်းဆိုမှုများကိုလုပ်ဆောင်သောအခါပရိုဂရမ်သည်အစောပိုင်းကချွင်းချက်သို့မဟုတ်ထွက်ပေါက်များကြုံတွေ့ရပါက,
ကွင်းဆက်တွင်ထပ်ခါတလဲလဲဖုန်းခေါ်ဆိုမှုများပြုလုပ်ခဲ့သော်လည်းအရင်းအမြစ်များအရအရင်းအမြစ်များကိုထုတ်ပြန်ခြင်းမရှိပါ Socket_Accept () ကိုဗျာဒိတ်တော်ဆောင်မှုတွင်အဆက်မပြတ်ဟုအဆက်မပြတ်ဟုအဆက်မပြတ်ဟုခေါ်ဆိုသော်လည်းဆက်သွယ်မှုအရင်းအမြစ်အဟောင်းကိုမပိတ်ပါ။
System File Descriptor အသုံးပြုမှုကိုစောင့်ကြည့်ပါ
Linux တွင်လုပ်ငန်းစဉ်ကဖွင့်လှစ်ထားသည့်ဖိုင်ဖော်ပြရန်အချက်အလက်အရေအတွက်ကိုကြည့်ရှုရန် command များကိုသုံးနိုင်သည်။
lsof -p <pid> | wc -l
အရေအတွက်တိုးပွားလာမလားဆိုတာကိုစောင့်ကြည့်ပါ။
logging socket ဖန်တီးခြင်းဖန်တီးခြင်းနှင့်ပိတ်ခြင်း <br> logs ထဲသို့မှတ်တမ်းများထည့်ပါ, socket_accept () နှင့်သက်ဆိုင်ရာပိတ်ခြင်းလည်ပတ်မှုနှင့်သက်ဆိုင်သော socket အရင်းအမြစ်များကိုမှတ်တမ်းတင်ထားသည့် socket resolution များကိုမှတ်တမ်းတင်ပြီး၎င်းတို့သည်အတွဲလိုက်ပေါ်လာသည်ကိုအတည်ပြုပါ။
မှတ်ဉာဏ်နှင့်အရင်းအမြစ်အသုံးပြုမှုကိုရှာဖွေရန်ကိရိယာများကိုသုံးပါ ကြိုး ကဲ့သို့သော system tools များ၏အကူအညီဖြင့် system calls များကိုစောင့်ကြည့်ခြင်းနှင့် unclesed sockets များကိုစောင့်ကြည့်ပါ။
client_Accept () , socket_close () ကိုရရှိသော client socket socket_close () ကိုပိတ်ထားသည့်အခါတိုင်းစီးပွားရေးပြုပြင်ထုတ်လုပ်မှုပြီးဆုံးပြီးနောက်ပိတ်ရန်တောင်းဆိုတိုင်း။
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
// အမှားကိုင်တွယ်
} else {
// စီးပွားရေးယုတ္တိဗေဒကိုင်တွယ်ပါ
// client ကိုပိတ်ပါsocket
socket_close($clientSocket);
}
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
// အမှားကိုင်တွယ်
} else {
try {
// စီးပွားရေးယုတ္တိဗေဒကုဒ်နံပါတ်
} catch (Exception $e) {
// ခြွင်းချက်ကိုင်တွယ်
} finally {
socket_close($clientSocket);
}
}
ဆက်သွယ်မှုများသို့မဟုတ်တန်းစီနေသည့်ယန္တရားများအများဆုံးအရေအတွက်ကိုသတ်မှတ်ခြင်းအားဖြင့်အရင်းအမြစ်များလျော့နည်းသွားခြင်းမှအချိန်မီဖြစ်ပေါ်စေခြင်းမှတားဆီးပါ။
လျင်မြန်စွာထပ်ခါတလဲလဲထပ်ခါတလဲလဲစုဆောင်းခြင်းကိုရှောင်ရှားရန် Socient_Accept () ခေါ်ဆိုမှုများကိုကွင်းဆက်တွင်စနစ်တကျထိန်းချုပ်ထားပါ။
while (true) {
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
usleep(100000); // စောင့်100မီလီစက္ကန့်,ရေှာင်ရှားCPUမြင့်တက်မြင့်တက်
continue;
}
// စီးပွားရေးပြုပြင်ခြင်း
socket_close($clientSocket);
}
<?php
$address = '0.0.0.0';
$port = 12345;
// ဖန်တီးsocket
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($serverSocket, $address, $port);
socket_listen($serverSocket);
echo "ဆာဗာစတင်ခြင်း,ဆိပ်ကမ်းကိုနားထောင်ပါ $port\n";
while (true) {
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
echo "ဆက်သွယ်မှုကိုလက်ခံရန်ပျက်ကွက်ခဲ့သည်: " . socket_strerror(socket_last_error($serverSocket)) . "\n";
usleep(100000);
continue;
}
try {
// client data ကိုဖတ်ပါ
$input = socket_read($clientSocket, 1024);
echo "client ကိုဒေတာကိုလက်ခံရရှိခဲ့သည်: $input\n";
// တုံ့ပြန်မှုတစ်ခုပို့ပါ
$response = "ဆာဗာဒေတာကိုလက်ခံရရှိခဲ့သည်\n";
socket_write($clientSocket, $response);
} catch (Exception $e) {
echo "ခြွင်းချက်ကိုင်တွယ်: " . $e->getMessage() . "\n";
} finally {
// client ကိုပိတ်ပါsocket,ရေှာင်ရှား资源泄露
socket_close($clientSocket);
}
}
socket_close($serverSocket);
?>
အရင်းအမြစ်ယိုစိမ့်မှုမှာဆာဗာ၏တည်ငြိမ်သောလည်ပတ်မှုအတွက်အဓိကအန္တရာယ်ဖြစ်သည်။ Socket_Accept ဖြင့်ပြန်လည်ရောက်ရှိသော client socket socket socket ကိုအချိန်တိုအတွင်းပိတ်ထားရမည်။ တစ်ချိန်တည်းမှာပင်စနစ်စောင့်ကြည့်လေ့လာခြင်းဆိုသည်မှာအရင်းအမြစ်ယိုစိမ့်မှုပြ problems နာများကိုလျင်မြန်စွာရှာဖွေပြီးပြန်လည်ပြုပြင်နိုင်သည်။ ဤအခြေခံမူများကိုလိုက်နာခြင်းဖြင့်သာ PHP Socket Service သည်ရေရှည်တွင်တည်ငြိမ်ပြီးထိရောက်စေရန်သေချာစေနိုင်သည်။