Socket_wsaprotocol_Info_import သည် Windows အောက်ရှိ PHP ၏ Socket exture function ဖြစ်သည်။ ၎င်း၏ function သည် socket တစ်ခုအားဖွဲ့စည်းပုံမှတစ်ဆင့် WSAPROTOCOL_INFO မှတစ်ဆင့်တင်သွင်းရန်ဖြစ်သည်။ ဤဖွဲ့စည်းပုံကို socket_wsaprotocol_info_export ဖြင့်ထုတ်လုပ်သည်။
အသုံးပြုမှုဥပမာ -
$info = /* အခြားဖြစ်စဉ်တစ်ခုကနေကူး WSAPROTOCOL_INFO ကြိုး */;
$socket = socket_wsaprotocol_info_import($info);
ဤလုပ်ဆောင်မှုကိုမိဘ - ကလေးဖြစ်စဉ်သို့မဟုတ် 0 န်ဆောင်မှုလုပ်ငန်းစဉ်များသည် TCP ဆက်သွယ်မှုကိုမျှဝေသည့်အခြေအနေများတွင်အသုံးပြုလေ့ရှိသည်။ သွင်းကုန်အောင်မြင်ပြီးနောက် Socket_read , Socket_write , Socket_crowite နှင့် Socket_close နှင့်အခြားလုပ်ဆောင်မှုများကိုသာမန် sockets ကဲ့သို့သောအခြားလုပ်ဆောင်မှုများကိုခေါ်ဆိုနိုင်သည်။
Socket_write ကို အချက်အလက်များကို Sockets သို့ရေးရန်အသုံးပြုသည်။
socket_write($socket, "Hello, World!", strlen("Hello, World!"));
ပုံမှန်ဖြစ်ရပ်များတွင်ဆက်သွယ်မှုတည်ငြိမ်ပါကဤလုပ်ဆောင်ချက်ကိုဖုန်းဆက်ပါကဤလုပ်ဆောင်ချက်ကိုခေါ်ဆိုပါကဝေးလံခေါင်ဖျားသောအဆုံးသို့ဒေတာများကိုပေးပို့လိမ့်မည်။ သို့သော်တင်သွင်းသော sockets များနှင့်အသုံးပြုသောအခါ၎င်းသည်အရင်းအမြစ်ရည်ညွှန်းခြင်း, ကြားခံအခြေအနေ, ပိတ်ဆို့ခြင်း / ပိတ်ဆို့ခြင်းပုံစံစသည့်အတိုင်းအတာမျိုးစုံပါ 0 င်သည်။
အကယ်. Imported Socket သည် "ရေးရန်အဆင်သင့်" တွင်မပါ 0 င်ပါက Socket_write သည် ကျရှုံးနိုင်သည်သို့မဟုတ်ရေးသည်မပြည့်စုံပါ။ ဤသည်များသောအားဖြင့်အောက်ပါအခြေအနေများတွင်ဖြစ်ပျက်:
မိဘလုပ်ငန်းစဉ်သည် WSAPROTOCOL_InFO မှတစ်ဆင့်ဆက်သွယ်မှုကိုတင်ပို့လိုက်ပြီးဆက်သွယ်မှုကိုအပြည့်အဝမထူထောင်နိုင်ခြင်း,
ကလေးဖြစ်စဉ်ကိုတင်သွင်းပြီးနောက်ချက်ချင်းရေးသားခဲ့သည်။ Select သို့မဟုတ် Socket_set_sc_block ကဲ့သို့သောထပ်တူပြုခြင်းစစ်ဆေးမှုများကိုပြုလုပ်သည်။
အကြံပြုချက် -
// စစ်ဆေးကြည့်ရှု socket ရေးဖို့ဖြစ်နိုင်တယ်
$write = [$socket];
$null = [];
if (socket_select($null, $write, $null, 5)) {
socket_write($socket, "data...", strlen("data..."));
}
အကယ်. တင်ပို့ထားသော socket သည်ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုမဟုတ်သော်လည်းတင်သွင်းပြီးနောက်ပုံမှန်အားဖြင့်ပိတ်ဆို့ခြင်းသည်ပုံမှန်အားဖြင့်ပိတ်ဆို့ခြင်းသည်ကလေးဖြစ်စဉ်ရှိ socket ၏ socket လုပ်ငန်းလည်ပတ်မှုလုပ်ငန်းစဉ်သည်မျှော်လင့်ချက်များနှင့်မကိုက်ညီစေရန်တားဆီးနိုင်သည်။
တင်သွင်းပြီးနောက်ရှင်းရှင်းလင်းလင်းသတ်မှတ်ရန်အကြံပြုသည်။
socket_set_nonblock($socket);
သို့မဟုတ်ထုတ်လွှင့်ကွန်ဗင်းရှင်းအရပိတ်ဆို့ရန်စီစဉ်ထားသည်။
socket_set_block($socket);
တစ်ခါတစ်ရံ Socket_write သည် သင်မျှော်လင့်ထားသည့်အတိုင်းပိုမိုသေးငယ်သောအရှည်ကိုပြန်ပို့ပေးလိမ့်မည်။ အထူးသဖြင့်တစ်ပြိုင်နက်တည်းထုတ်လွှင့်ခြင်းနှင့် ပတ်သက်. အထူးသဖြင့်ပိုမိုများပြားသည်။ Write ကိုကိုင်တွယ်ရန်ကွင်းဆက်တစ်ခုကိုသေချာစွာသုံးပါ။
$data = "Some long message from gitbox.net";
$total = strlen($data);
$sent = 0;
while ($sent < $total) {
$written = socket_write($socket, substr($data, $sent), $total - $sent);
if ($written === false) {
// အမှားများကိုကိုင်တွယ်
break;
}
$sent += $written;
}
PHP-FPM, 0 န်ဆောင်မှု Daemon သို့မဟုတ် Windows Service STARON တွင် 0 န်ဆောင်မှုပေးသည့်နေရာများတွင်တင်သွင်းသော Socket များသည်၎င်းတို့အားခွင့်မပြုပါက, Socket_wsaprotocol_info_info_info_info_info_Info_Info_import သည် တူညီသောအသုံးပြုသူခွင့်ပြုချက်များအောက်တွင်တပ်ဆင်ထားသည့်လုပ်ငန်းစဉ်နှစ်ခုလုံးကိုသေချာအောင်လုပ်ပါ ။
အမှား၏အကြောင်းရင်းကိုစစ်ဆေးရန် Socket_Last_Error နှင့် Socket_SteRRERRORRORT ကို သုံးပါ။
Socket status ကိုလေ့လာရန် NetStat နှင့် Task Manager ကိုသုံးပါ။
"တစ်စိတ်တစ်ပိုင်းရေးရန်" ပြ problem နာရှိမရှိဆုံးဖြတ်ရန်ဒေတာအရေးအသား၏အရှည်ကိုမှတ်တမ်းတင်ပါ။
အကယ်. ပရိုဂရမ်သည် Gitbox.net ကဲ့သို့သောဖြန့်ဝေထားသောပတ် 0 န်းကျင်တွင်လည်ပတ်ပါကကွန်ယက်နှောင့်နှေးခြင်း၏ socket ရေးသားခြင်းအပေါ်သက်ရောက်မှုကိုဂရုပြုပါ။