PHP, Socket_export_Stream () တွင် Socke level societ အရင်းအမြစ်ကိုပိုမိုအဆင့်မြင့်သော socke stream အရင်းအမြစ်များကိုတင်ပို့နိုင်ရန်အတွက်အဆင့်နိမ့် socke stream အရင်းအမြစ်များကိုတင်ပို့ရန်ခွင့်ပြုသည့်အလွန်လက်တွေ့ကျသောလုပ်ဆောင်ချက်ဖြစ်သည်။ အထူးသဖြင့် stream_select () , frame () , fwis () , fwis စသည့်လက်ရှိ streaming apis နှင့်ပူးပေါင်းလုပ်ဆောင်ခြင်းသည်ဖွံ့ဖြိုးတိုးတက်မှုလုပ်ငန်းစဉ်ကိုအလွန်ရိုးရှင်းစေသည်။
သို့သော် Socketets များကိုစီးဆင်းစေရန်ကူးပြောင်းပြီးနောက် developer များစွာသည်ဘုံပြ problem နာများနှင့်ကြုံတွေ့ရပြီး ပ conflicts ိပက်ခများကြုံတွေ့နေရသည့်အခါပ conflicts ိပက်ခများကပရိဘောဂများပြုလုပ်နေစဉ်, ဤပြ problem နာအမျိုးအစား၏အဓိကအချက်မှာအချက်အလက်စီးဆင်းမှု၏တည်ငြိမ်မှုနှင့်ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန်ဖတ်ရန်နှင့်ရေးသားခြင်းလုပ်ငန်းစဉ်ကိုပိုမိုကောင်းမွန်စွာစီစဉ်ရန်မည်သို့စီစဉ်ရမည်ကိုဆိုသည်။
Socket_Export_stream () socket to stream ကိုပြောင်းရန် PHP သည် စာဖတ်နိုင်သည့် နှင့် သက်သက် စွမ်းရည်များကိုပေးလိမ့်မည်။ သီအိုရီအရသင်သည်၎င်းကို fread () နှင့် fwite) နှင့်တိုက်ရိုက်ကိုင်တွယ်နိုင်သည်။ သို့သော်ဖတ်ရန်နှင့်ရေးသားခြင်းလုပ်ငန်းများကိုစီစဉ်ထားခြင်းမရှိပါကအောက်ပါပြ problems နာများဖြစ်ပေါ်နိုင်သည်။
စစ်ဆင်ရေးပိတ်ဆို့ခြင်း - အခြားပါတီသည်အချက်အလက်များကိုမဖတ်ပါက FWFER သည်အပြည့်အ 0 ပိတ်ဆို့မည့်အခါ အချက်အလက်များကို မဖတ်ပါက။
Read Data မရှိသည့်အခါ စစ်ဆင်ရေးပိတ်ဆို့ခြင်း () ကိုခေါ်ဆို ခြင်း () ကို ခေါ်ဆိုခြင်းဒေတာပိတ်ဆို့ခြင်းမရှိပါ။
ဒေတာရှုပ်ထွေးမှု - တစ်ပြိုင်နက်တည်းဖတ်ရှုခြင်းနှင့်ရေးခြင်းရေးခြင်းမပြုပါနှင့်မကိုက်ညီသော protocchronization ကိုမပြုလုပ်ပါ။
အထက်ပါပြ problems နာများကိုရှောင်ရှားရန်အသုံးပြုစဉ်အတွင်းလုံခြုံမှုနှင့်ထိရောက်သောစီးဆင်းမှုကိုသေချာစေရန်အောက်ပါရှုထောင့်များမှကျွန်ုပ်တို့စတင်နိုင်သည်။
စီးပွါးရေးကိုပိတ်ဆို့ခြင်းမဟုတ်သော mode သို့ချထားပါ။ ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်မည်သည့်အချိန်တွင်မည်သည့်အချိန်တွင်မည်သည့်အချိန်တွင်မည်သည့်အချိန်တွင်စစ်ဆေးရမည်ကိုဆုံးဖြတ်ရန် stream_select () ကိုအသုံးပြုပါ။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'm66.net', 80);
$stream = socket_export_stream($socket);
stream_set_blocking($stream, false); // Non-blocking mode ကိုသတ်မှတ်ပါ
$read = [$stream];
$write = [$stream];
$except = null;
if (stream_select($read, $write, $except, 5)) {
if (!empty($write)) {
fwrite($stream, "GET / HTTP/1.1\r\nHost: m66.net\r\n\r\n");
}
if (!empty($read)) {
$response = fread($stream, 8192);
echo $response;
}
}
ဤနည်းအားဖြင့်စမ်းချောင်းကိုစာဝှက်ပြီးဖတ်နိုင်သည့်အခါမှသာစာရေးခြင်းကိုထိန်းချုပ်နိုင်သည်။ ပိတ်ဆို့ခြင်းနှင့်အရင်းအမြစ်စွန့်ပစ်ပစ္စည်းများကိုရှောင်ရှားနိုင်သည်။
socket_export_stream ()) သည် စုစုပေါင်း protocols များသို့မဟုတ် applications များ၌ bidirectional stream ကိုပြန်ပို့သော်လည်းအချို့သော protocols များသို့မဟုတ် applications များ၌ ဖတ်ခြင်းနှင့်ရေးခြင်းဆိုင်ရာယုတ္တိဗေဒခွဲခြားခြင်းတို့သည် ပ conflicts ိပက်ခများကိုလျှော့ချနိုင်သည်။ Layer protocol control control / coroutines / Multiprocesses / Threads ကိုမိတ်ဆက်ပေးခြင်းဖြင့်သင်ဖတ်ရှုခြင်းနှင့်ရေးခြင်းပြုလုပ်နိုင်သည်။
ဥပမာအားဖြင့် stream_socket_pair () ကို သုံးရန် two twoure socket streams နှစ်ခုကိုဖန်တီးရန်, တစ်ခုမှာစာဖတ်ခြင်းအတွက်တာ 0 န်ရှိသည်။
stream_selecte () ကို မသုံးသောဖြစ်ရပ်များတွင်သင်ဖတ်ရှုခြင်းနှင့်ရေးရန်အမိန့်ကိုထိန်းချုပ်ရန်အတွက်ပရိုဂရမ်တွင်သော့ခလောက်များကိုအတိအလင်းထည့်နိုင်သည်။
$lock = fopen(__FILE__, 'r');
flock($lock, LOCK_EX);
// ဒေတာရေးပါ
fwrite($stream, $data);
// သော့ဖွင့်ပြီးနောက်ဒေတာကိုဖတ်ပါ
flock($lock, LOCK_UN);
$response = fread($stream, 8192);
ဤနည်းလမ်းသည်အတော်လေးစရိုက်ဖြစ်သော်လည်းတစ်ပြိုင်နက်တည်း applications များတွင်တစ်ပြိုင်နက်တည်းအရင်းအမြစ်ပ conflicts ိပက်ခများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။
အခြားပါတီကိုချက်ချင်းဖတ်ရန်မျှော်လင့်ထားသည့်စစ်ဆင်ရေးကိုဖြည့ ် စွက်ရန်သင်စီးဆင်းမှုကိုသင်အသုံးပြုသောအခါ, ဆက်သွယ်မှုကိုမပိတ်မီ, သင်ဖတ်ရှုခြင်းအဆုံးသတ်ခြင်းကို ဦး စွာပိတ်ရန်သင်အာရုံစိုက်သင့်သည်။
fwrite($stream, $data);
fflush($stream);
fclose($stream);
Socket_Export_stream () , စမ်းချောင်း၏လည်ပတ်မှုကိုတိုးမြှင့်ခြင်းခံရသော်လည်းထပ်တူထိန်းချုပ်မှု၏စိန်ခေါ်မှုကိုလည်းမိတ်ဆက်ပေးသည်။ ပ conflicts ိပက်ခများကိုဖတ်ခြင်းနှင့်ရေးခြင်းမပြုရန်သင်လုပ်နိုင်သည် -
တိကျမှန်ကန်စွာအစီအစဉ်ချရန် stream_select () ကို သုံးပါ။
Non-blocking mode ဖြင့် တွဲဖက်. အသုံးပြုသည်။
သော့ခလောက်များ, coroutines များသို့မဟုတ်ပြတ်တောင်းပြတ်တောင်းပြုပြင်ရေးယန္တရားများကိုမိတ်ဆက်ပေးခြင်း,
Buffer Refresh Refresh နှင့် Vones ကိုစီမံပါ။
ဤနည်းလမ်းများမှတစ်ဆင့် PHP ကွန်ယက်ပရိုဂရမ်ရှိ Socket Conments Streams ရှိယုံကြည်စိတ်ချရမှုနှင့်ထိန်းသိမ်းခြင်းကိုထိရောက်စွာတိုးတက်အောင်လုပ်နိုင်သည်။