PHP တွင်ပရိုဂရမ်းမင်းကွန်ယက်များဖြစ်သော PHP တွင် Socket Programming သည်ဘုံနှင့်နောက်ခံဆက်သွယ်ရေးနည်းလမ်းဖြစ်သည်။ ပိတ်ဆို့ခြင်းကိုပိတ်ဆို့ရန်လိုအပ်သည့်ဖြစ်ရပ်များအတွက် socket_set_set_block နှင့် socket_read လုပ်ဆောင်ချက်များသည်ထိရောက်စွာတည်ငြိမ်သောဒေတာ receptable ည့်ခံပွဲကိုရရှိရန်အတွက် socket_set_scobe နှင့် socket_read လုပ်ဆောင်ချက်များကိုကျိုးကြောင်းဆီလျော်စွာအသုံးပြုသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုနှစ်ခုကိုအသုံးပြုခြင်းကိုဥပမာများနှင့်ပေါင်းစပ်။ အသေးစိတ်အသုံးပြုသောနည်းစနစ်များကိုမိတ်ဆက်ပေးလိမ့်မည်။
Blocking Mode : Data အဆင်သင့်မဖြစ်သေးပါကအချက်အလက်များကိုဖတ်လို့မရလျှင်ပရိုဂရမ်သည်ပိတ်ဆို့ခြင်းသို့မဟုတ်အချိန်ကုန်သည်အထိပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်းလိမ့်မည်။
Non-blocking mode : ဖတ်ရန် function ကိုချက်ချင်းပြန်ပို့သည်။ အကယ်. ဒေတာကိုဖတ်လို့မရလျှင်၎င်းသည်အချည်းနှီးသို့မဟုတ်အမှားတစ်ခုပြန်ရောက်လာပြီး,
ပုံမှန်အားဖြင့် PHP Socket သည် HTTP တောင်းဆိုမှုပြုပြင်ခြင်း, chat application များစသဖြင့်အပြည့်အဝရောက်ရှိရန်စောင့်ဆိုင်းရန်လိုအပ်သော application များအတွက်သင့်လျော်သောပိတ်ဆို့ခြင်း mode တွင်ရှိသည်။
Socket_set_block (Resource $ socket): Bool
mode ကိုပိတ်ဆို့ရန် Socket ထားပါ။ ဒီ function ကိုခေါ်ပြီးနောက် data turnable ကိုဖတ်လို့မရတဲ့အထိနောက်ဆက်တွဲ socket_read ကို ပိတ်ဆို့လိမ့်မယ်။
socket_read (အရင်းအမြစ် $ socket, int $ အရှည်, int $ typ = php_binary_read): string |
Socket မှအချက်အလက်များကိုဖတ်ပါ။ အကယ်. ၎င်းသည်ပိတ်ဆို့ခြင်း mode တွင်ရှိပါကအချက်အလက်မရှိပါကအချက်အလက်များကိုစောင့်ဆိုင်းရန်စောင့်ပါ, အကယ်. ၎င်းသည်ပိတ်ဆို့ခြင်းမဟုတ်လျှင်ချက်ချင်းပြန်လာလိမ့်မည်။
ပိတ်ဆို့ခြင်း mode ကို set <br> Socket_set_sckblock ($ socket) ဖြင့် CPU ကိုမဖြုန်းတီးပါက CPU ကိုမဖြုန်းတီးပါနှင့်။
ကျိုးကြောင်းဆီလျော်ဖတ်ရန်အရှည်ကိုသတ်မှတ်
Socket_read ၏ ဒုတိယအိုင်အိုင်အချိန်တွင်အချိန်တိုင်းဖတ်သည့် Bytes အရေအတွက်ကိုသတ်မှတ်သည်။ အလွန်သေးငယ်သောနည်းစနစ်များမကြာခဏခေါ်ဆိုမှုများကို ဦး တည်သွားစေပြီးကြီးမားလွန်းသည်။
Ending Ending အတွက်လုပ်ဆောင်ခြင်းအခြေအနေများ များသောအားဖြင့်စာဖတ်ခြင်းကိုပိတ်ဆို့ခြင်းသည်သတ်သတ်မှတ်မှတ်အဆုံးသတ်သည့်ဇာတ်ကောင်ကိုဖတ်ခြင်းသို့မဟုတ်သေနေသောကွင်းဆက်ကိုရှောင်ရှားရန်သတ်မှတ်ထားသောအရှည်ကိုဖတ်ရှုခြင်းပြုလုပ်ရန်လိုအပ်သည်။
အမှားနှင့်အချိန်ကုန်ခြင်းကိုင်တွယ်ခြင်း <br> ပိတ်ဆို့ခြင်း mode ကိုစောင့်ဆိုင်းသော်လည်းအမြဲတမ်းပိတ်ဆို့ခြင်းမှကာကွယ်ရန်အချိန်ကိုအမှန်တကယ် applications များတွင်သတ်မှတ်ထားသင့်သည်။ PHP socket ကိုယ်နှိုက်သည်လက်မခံနိုင်သည့်အချိန်သတ်မှတ်ချက်များမရှိပါ။ သို့သော် Socket_select ဖြင့်အကောင်အထည်ဖော်နိုင်သည်။
<?php
// ဖန်တီး TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create failed: " . socket_strerror(socket_last_error()));
}
// ဆာဗာကိုဆက်သွယ်ပါ,ဒိုမိန်းအမည်ကိုအစားထိုးပါ gitbox.net
$host = "gitbox.net";
$port = 80;
if (!socket_connect($socket, $host, $port)) {
die("socket_connect failed: " . socket_strerror(socket_last_error($socket)));
}
// ပိတ်ဆို့ခြင်း mode ကို set
socket_set_block($socket);
// ပို့ရန်ရိုးရှင်း HTTP ဟုတ်ကဲ့ဥပမာ
$request = "GET / HTTP/1.1\r\nHost: gitbox.net\r\nConnection: close\r\n\r\n";
socket_write($socket, $request, strlen($request));
// တုံ့ပြန်မှုဒေတာကိုဖတ်ပါ
$response = '';
while (true) {
// အများဆုံးဖတ်ကြသည်1024ဒရယ်
$buf = socket_read($socket, 1024, PHP_BINARY_READ);
if ($buf === false) {
echo "socket_read failed: " . socket_strerror(socket_last_error($socket));
break;
}
if ($buf === '') {
// စာဖတ်ခြင်းအဆုံးသတ်
break;
}
$response .= $buf;
}
// output server တုံ့ပြန်မှု
echo $response;
// ရုပ်သိမ်းခြင်း socket
socket_close($socket);
?>
Socket_set_set_block ကို ပိတ်ထားပြီးတဲ့နောက် Socket_read ကို Socket_read သည် CPU အသုံးပြုမှုမြင့်မားခြင်းကိုရှောင်ရှားသည်အထိ Socket_read ကိုပိတ်ဆို့လိမ့်မည်။
စာဖတ်ချိန်နှင့်ကွင်းဆက်ထွက်ပေါက်အခြေအနေများသည်ထိရောက်စွာနှင့်လုံခြုံသောဒေတာ reception ည့်ခံမှုကိုသေချာစေရန်ဖတ်စဉ်အတွင်းကျိုးကြောင်းဆီလျော်စွာသတ်မှတ်သင့်သည်။
Socket_select နှင့်အတူပေါင်းစပ်ခြင်း, အချိန်ကုန်ခြင်းဖြင့်စာဖတ်ခြင်းကိုပိတ်ဆို့ခြင်းသည်အစီအစဉ်အလိုက်တိုးတက်စေရန်အတွက်စာဖတ်ခြင်းကိုပိတ်ဆို့နိုင်သည်။
အပေါ်ကဥပမာသည် http တောင်းဆိုမှုကိုအသုံးပြုသည်။
Socket_set_scoSc_block and Socket_read နှင့်အတူတကွပူးပေါင်းပါ 0 င်ခြင်းဖြင့် PHP Socket ဖတ်ရှုခြင်းအားဖြင့်ပိုမိုထိရောက်စွာတည်ငြိမ်အောင်ပြုလုပ်နိုင်သည်။