မြင့်မားသောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုလုပ်ဆောင်သည့်အခါ PHP သည်ဆာဗာဘေးထွက် scripting language တစ်ခုအနေဖြင့်, အထူးသဖြင့် i / O စစ်ဆင်ရေးများ, စာဖတ်ခြင်း, စာဖတ်ခြင်း, စာဖတ်ခြင်း, Socket_set_scoChing function သည် PHP တွင်အသုံးဝင်သောကိရိယာတစ်ခုဖြစ်ပြီး developer များသည် sockets ၏ပိတ်ဆို့ခြင်းအပြုအမူကိုထိရောက်စွာထိန်းချုပ်နိုင်အောင်ကူညီနိုင်အောင်ကူညီနိုင်ပြီးတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုတိုးတက်စေသည်။ ဤဆောင်းပါးသည် PHP ၏တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုကိုအကောင်းဆုံးလုပ်ရန် socket_set_blocking function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။
Socket_set_blocking သည် Socket သည်ပိတ်ဆို့ခြင်းကိုထိန်းချုပ်သည်ကိုထိန်းချုပ်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ပုံမှန်အားဖြင့် Socket များပိတ်ခြင်းသည်ပိတ်ဆို့ခြင်း mode တွင် run သည်, ၎င်းသည် socket operty (စာဖတ်ခြင်းသို့မဟုတ်အချက်အလက်များ) တွင်အချက်အလက်များမရှိပါကဤပရိုဂရမ်သည်အချက်အလက်များကိုမရမှီတိုင်အောင်စောင့်ဆိုင်းနေစေသည်။ ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket သို့ socket လုပ်ရန်ပရိုဂရမ်သည်ကျွန်ုပ် / o စစ်ဆင်ရေးပြီးစီးခြင်းကိုစောင့်ဆိုင်းမည့်အစားအခြားအလုပ်များကိုဆက်လက်လုပ်ဆောင်နိုင်သည်။
bool socket_set_blocking ( resource $socket , bool $blocking )
$ socket : သတ်မှတ်ထားရန်လိုအပ်သည့် socket အရင်းအမြစ်။
$ ပိတ်ဆို့ခြင်း - အကယ်. မှန်ကန် ပါက socket ကိုပိတ်ဆို့ရန် mode ကိုသတ်မှတ်ရန်, အကယ်. မှားယွင်းသော် လျှင် socket ကိုပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ပါ။
ရိုးရာပိတ်ဆို့ခြင်းပုံစံများသည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုကိုင်တွယ်ရာတွင်စနစ်စွမ်းဆောင်ရည်ပိတ်ဆို့မှုများကိုဖြစ်ပေါ်စေနိုင်သည်။ socket ကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket သို့သတ်မှတ်ခြင်းဖြင့် PHP script သည် socket လည်ပတ်ရန်စောင့်နေစဉ်အခြားတောင်းဆိုမှုများကိုဆက်လက်လုပ်ဆောင်နိုင်သည်။ Socket_set_sblocking မှတဆင့်ထိရောက်သောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုကိုရယူရန်မည်သို့ပြုလုပ်ရမည်နည်း။
0 န်ဆောင်မှုခံယူသူများစွာကိုတောင်းဆိုမှုများပြုလုပ်ရန်လိုသည်ဟုယူဆပြီးတောင်းဆိုမှုတစ်ခုစီကိုထုတ်ယူသောအခါပိတ်ဆို့ခြင်းကိုရှောင်ရှားလိုပါသည်။ ရိုးရှင်းသောဥပမာကုဒ်ဖြစ်သည်။
<?php
// ဖန်တီးTCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
// ချည်နေှာင်socket
socket_bind($socket, '127.0.0.1', 8080);
// စောင့်ကြည့်လေ့လာရေးစတင်ပါ
socket_listen($socket);
// Non-blocking mode ကိုသတ်မှတ်ပါ
socket_set_blocking($socket, false);
while (true) {
// client connection များကိုလက်ခံရရှိသည်
$client = socket_accept($socket);
// ဆက်သွယ်မှုမရှိလျှင်အခြားစစ်ဆင်ရေးများကိုဆက်လက်လုပ်ဆောင်ပါ
if ($client === false) {
// ဥပမာအားဖြင့်အခြားအလုပ်များကိုစစ်ဆေးပါသို့မဟုတ် logging operations များကိုပြုလုပ်ပါ
echo "ဖောက်သည်ဆက်သွယ်မှုမရှိပါ,အခြားအလုပ်များအပေါ်ဆက်လက်အလုပ်လုပ်ဆက်လက်...\n";
continue;
}
// client ကိုပိတ်ဆို့ခြင်းမှ client ကိုသတ်မှတ်ပါ
socket_set_blocking($client, false);
// client data ကိုဖတ်ပါ
$input = socket_read($client, 1024);
if ($input) {
echo "client ကိုဒေတာကိုလက်ခံရရှိခဲ့သည်: $input\n";
// တောင်းဆိုမှုကိုနှင့်တုံ့ပြန်ပါ
socket_write($client, "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello, Client!");
}
// ဆက်သွယ်မှုကိုပိတ်ပါ
socket_close($client);
}
socket_close($socket);
?>
အထက်ပါကုဒ်တွင် socket_set_sclocking ($ socket, false) မှ socket_set_blocking ($ Socket, False) သို့ socket_sc.Cy ကို သတ်မှတ်ရန်ဆိုထားသည် ။ ၎င်းသည် program_acception တွင်မနေဘဲ client connection မပါဘဲအခြားအလုပ်များကိုဆက်လက်လုပ်ဆောင်ရန်ခွင့်ပြုသည်။
အလားတူစွာ client connection တစ်ခုချင်းစီကိုကိုင်တွယ်သောအခါ client socket ကိုပိတ်ထားသော mode သို့ 0 င်ရောက်ခြင်းကိုပြုလုပ်ရန်,
တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပိတ်ဆို့ခြင်း socket operations များ, socket_select သို့မဟုတ် multi-thread / multi-thread / multi-thread method များကိုတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုပိုမိုထိရောက်စွာလုပ်ဆောင်ရန်အသုံးပြုနိုင်သည်။ Socket_select သည် socket အရင်းအမြစ်များကိုစောင့်ကြည့်လေ့လာနိုင်သည့် Socket Relections မျိုးစုံကိုစောင့်ကြည့်လေ့လာနိုင်သည့်အလွန်အသုံးဝင်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။
<?php
// ဖန်တီး主socket
$masterSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($masterSocket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($masterSocket, '127.0.0.1', 8080);
socket_listen($masterSocket);
// Non-blocking ကိုသတ်မှတ်
socket_set_blocking($masterSocket, false);
$clients = array($masterSocket);
while (true) {
// အသုံးပြုsocket_selectစောင့်ကြည့်လေ့လာခြင်းလုပ်ဆောင်ပါ
$read = $clients;
$write = null;
$except = null;
// စောင့်ရေှာက်socket
if (socket_select($read, $write, $except, null) > 0) {
// ဒေတာအားလုံးမှတဆင့်ကြားမှာsocket
foreach ($read as $socket) {
if ($socket === $masterSocket) {
// ဆက်သွယ်မှုအသစ်များကိုလက်ခံပါ
$client = socket_accept($masterSocket);
socket_set_blocking($client, false);
$clients[] = $client;
} else {
// client data ကိုဖတ်ပါ
$input = socket_read($socket, 1024);
if ($input === false) {
// ခဲှခြား
socket_close($socket);
$clients = array_diff($clients, array($socket));
} else {
echo "ဒေတာကိုလက်ခံရရှိခဲ့သည်: $input\n";
socket_write($socket, "Hello, Client!");
}
}
}
}
}
socket_close($masterSocket);
?>
ဤဥပမာတွင် Socket_select function ကိုတစ်ပြိုင်နက်တည်း mutces များကိုစောင့်ကြည့်ရန် socket_select function ကိုအသုံးပြုသည်။ Socket ကိုရရှိနိုင်သည့်အခါပရိုဂရမ်သည်ဒေတာများကိုဖတ်ပြီးလုပ်ဆောင်သည်။ ဤနည်းအားဖြင့်ဆာဗာသည်တစ်ပြိုင်နက်တည်းကတစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုတစ်ချိန်တည်းတွင်တောင်းဆိုမှုတစ်ခုကြောင့်အခြားတောင်းဆိုမှုများကိုပိတ်ဆို့ခြင်းမပြုဘဲတစ်ချိန်တည်းတွင်တစ်ချိန်တည်းတွင်လုပ်ဆောင်နိုင်သည်။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကို socket လုပ်ရန် socket_set_sclocking function ကိုအသုံးပြုခြင်းသည် PHP တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုအပြောင်းအလဲအတွက်ပြုပြင်ရန်အတွက်အရေးကြီးသောနည်းလမ်းတစ်ခုဖြစ်သည်။ blocking mode ကိုပြင်ဆင်ခြင်းနှင့် Socket_select လုပ်ဆောင်ချက်များကို အသုံးပြု. developer များက PHP တွင် PHP တွင်စွမ်းဆောင်ရည်မြင့်မားသောတောင်းဆိုမှုကိုပြုလုပ်နိုင်သည်။ I / O စစ်ဆင်ရေးများကိုအကောင်းဆုံးသောဆက်သွယ်မှုအမြောက်အများကိုကိုင်တွယ်ရန်လိုအပ်သော application များအတွက်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်အတွက်သော့ချက်ဖြစ်သည်။