PHP Network Programming တွင်ကိုင်တွယ်မှုမြှောက်ခဲမှုသည်ထိရောက်သောကွန်ရက် 0 န်ဆောင်မှုများကိုရရှိရန်အတွက်အဓိကနည်းပညာဖြစ်သည်။ Socket_set_option နှင့် Socket_select သည် PHP Socket Programming တွင်အရေးကြီးသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။ developer များစွာသည်၎င်းတို့ကိုအတူတကွအသုံးပြုနိုင်သည်, အထူးသဖြင့်အကောင်အထည်ဖော်သည့်အခါမှန်ကန်စွာကိုက်ညီရမည်ကိုစဉ်းစားကြလိမ့်မည်။
ဤဆောင်းပါးသည် socket_set_set_option နှင့် socket_select ၏အခန်းကဏ် and ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်, ၎င်းတို့ကိုအတူတကွအသုံးပြုနိုင်သည်, မပြည့်စုံနိုင်အောင်မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးပါမည်။
Socket_set_option သည် socket များအတွက်ရွေးချယ်စရာများအတွက်ရွေးချယ်စရာများအတွက်ရွေးချယ်စရာများကိုအသုံးပြုသည်။ လိပ်စာကိုပြန်လည်အသုံးပြုခြင်း,
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
အထက်ပါကုဒ်သည် address Reuse option ကို socket ကို socket ကိုသတ်မှတ်သည်။ ၎င်းသည်ဆာဗာပြန်လည်စတင်သည့်အခါ ports များကိုမြန်မြန်ဆန်ဆန်ချည်နှောင်ထားလေ့ရှိသည်။
Socket_select သည် Multiplexing ကိုအကောင်အထည်ဖော်ရန်အဓိကလုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းသည် socket မျိုးစုံအတွက်နားထောင်ရန်အသုံးပြုသည်။ Socket များထဲမှတစ်ခုသို့မဟုတ်တစ်ခုထက် ပို. ဖတ်ရန်နှင့်ရေးသားရန်အဆင်သင့်ဖြစ်သည့် function ကိုပြန်ပို့သည်။ ၎င်းသည်တစ်ပြိုင်နက်တည်း connection မျိုးစုံကိုတစ်ပြိုင်နက်တည်းကိုင်တွယ်ရန်တစ် ဦး တည်းချည်ထားသောအစီအစဉ်ကိုခွင့်ပြုသည်။
$read = [$socket1, $socket2];
$write = null;
$except = null;
$timeout = 5;
$num_changed = socket_select($read, $write, $except, $timeout);
Socket_select သည် ဒေါ်လာဖတ်ရန် , ဒေါ်လာရေးရန် နှင့် arrays မှလွဲ. $ array မှလွဲ . ပြန်လည်ပြင်ဆင်ခြင်းဖြင့်ပြင်ဆင်ထားသော socketets များကိုပြန်လည်ရောက်ရှိစေသည်။
အဖြေက ဟုတ်တယ် , ဒါပေမယ့်နှစ်ခုရဲ့လုပ်ဆောင်ချက်တွေကမတူကြဘူး။ အတူတူအသုံးပြုသောအခါအသုံးပြုမှုကိုရှင်းရှင်းလင်းလင်းခွဲခြားထားသင့်သည် -
socket_set_option ကို (ဥပမာအချိန်ကုန်များ, ကြားခံစသည်တို့) ကိုပြုပြင်ရန်အသုံးပြုသည်။
Socket_select ကို Socket မျိုးစုံဖတ်လို့မရတဲ့,
Multipliming သည်အဓိကအားဖြင့် Socket_set_Ontect_Socke ၏ ဂုဏ်သတ္တိများကိုသာအများအားဖြင့် socket ၏ဂုဏ်သတ္တိများကိုသာညှိသည် ။
အောက်ဖော်ပြပါသည် Socket_set_Set_Option ကို Socket_set_Settion ကို socket_set_option ဖြင့် socket_set_option ဖြင့်မည်သို့သတ်မှတ်ရမည်နည်း။
<?php
// ဖန်တီး TCP socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);
// ဆိပ်ကမ်း binding
socket_bind($server, '0.0.0.0', 8080);
socket_listen($server);
$clients = [];
$read = [$server];
while (true) {
$readSockets = $read;
$write = null;
$except = null;
// မျိုးစုံနားထောင်ပါ socket ပြောင်းလဲမှုများ
$numChanged = socket_select($readSockets, $write, $except, 5);
if ($numChanged === false) {
echo "socket_select အမှားတစ်ခုဖြစ်ပွားခဲ့သည်\n";
break;
} elseif ($numChanged > 0) {
// ဖောက်သည်အသစ်တစ်ခုကိုနားထောင်ပါ
if (in_array($server, $readSockets)) {
$newClient = socket_accept($server);
if ($newClient !== false) {
socket_set_option($newClient, SOL_SOCKET, SO_RCVTIMEO, ["sec"=>5, "usec"=>0]);
$clients[] = $newClient;
$read[] = $newClient;
echo "ဖောက်သည်အသစ်\n";
}
unset($readSockets[array_search($server, $readSockets)]);
}
// လက်ရှိဖောက်သည်များကပေးပို့သောလုပ်ငန်းစဉ်အချက်အလက်များ
foreach ($readSockets as $socket) {
$data = socket_read($socket, 1024, PHP_NORMAL_READ);
if ($data === false || $data === '') {
// ဆက်သွယ်မှုပိတ်
socket_close($socket);
unset($clients[array_search($socket, $clients)]);
unset($read[array_search($socket, $read)]);
echo "client ကိုအဆက်ပြတ်\n";
} else {
$data = trim($data);
echo "client ကိုဒေတာကိုလက်ခံရရှိခဲ့သည်: $data\n";
// တုံ့ပြန်မှုတစ်ခုပို့ပါ
socket_write($socket, "ဆာဗာကိုလက်ခံရရှိခဲ့သည်: $data\n");
}
}
}
}
socket_close($server);
အဓိကအချက်များဖော်ပြချက်:
server socket $ ဆာဗာသည် soec_setdre ကို sockeuseaddr ကို sockeuseaddr ကို sockeuseaddr ကို တပ်ဆင်ထားသည်။
client connection အသစ်ကိုတည်ဆောက်ပြီးသည်နှင့်လက်ခံရရှိသည့်အချိန်ကိုလက်ခံခြင်းသည် socket_set_option ပါရှိသည်။
Socket_Select သည် တက်ကြွသော client sockets နှင့် server sockets များအားလုံးကိုနားထောင်သည်။
Socket_set_option နှင့် Socket_Sock_select လုပ်ဆောင်ချက်များသည်ကွဲပြားသော်လည်း၎င်းတို့ကိုပေါင်းစပ်။ အသုံးပြုနိုင်သည်။
Socket_set_option သည် socket parameters များကို configure လုပ်ခြင်းနှင့်ကွန်ရက်စွမ်းဆောင်ရည်နှင့်အပြုအမူများကိုပိုမိုကောင်းမွန်စေရန်တာ 0 န်ရှိသည်။
Socket_select သည် Socket Events မျိုးစုံကိုမြှောက်ခြင်းနှင့်နားထောင်ခြင်းအတွက်တာ 0 န်ရှိသည်။
ဤလုပ်ဆောင်ချက်နှစ်ခုကိုအသုံးပြုခြင်းသည်ထိရောက်သောတည်ငြိမ်သောကွန်ယက်ဆာဗာပရိုဂရမ်များကိုကျိုးကြောင်းဆီလျော်စွာရေးနိုင်သည်။
PHP Socket Multiplexing ကိုသင်လေ့လာလိုပါကအသေးစိတ်နှင့်အဆင့်မြင့်ကျွမ်းကျင်မှုများကိုကျွမ်းကျင်ရန်တရားဝင်စာရွက်စာတမ်းများနှင့်ဆက်စပ်ကွန်ယက်ပရိုဂရမ်စာအုပ်များကိုလည်းသင်ရည်ညွှန်းနိုင်သည်။
ဆောင်းပါး၏ပုံနမူနာအတွက် URL ဒိုမိန်းအမည်မှာအောက်ပါအတိုင်းဖြစ်သည် -
$url = "https://gitbox.net/api/socket_demo";