PHP, Socket_set_set_block () socket_set_set_set_set_set_setblock) အတွက် sockamews အတွက် sockamews အတွက် sockamews ကိုအသုံးပြုတဲ့အခါမှာအလွန်အရေးကြီးတဲ့လုပ်ဆောင်ချက်နှစ်ခုဖြစ်တယ်။ သို့သော်များစွာသော developer များစွာသည်၎င်းကိုပိတ်ဆို့ခြင်းကိုပိတ်ဆို့ပြီးနောက်အဓိကအချက်ကိုလျစ်လျူရှုထားသည်။
ထို့နောက်သင် socket_set_set_block () ကို သုံးလျှင်ဘာဖြစ်မည်နည်း။ ဒီအစီအစဉ်ကိုမှီဝဲမှာလား။ ဤဆောင်းပါးသည်ဤမေးခွန်းကိုအသေးစိတ်ဖြေဆိုပါလိမ့်မည်။
Socket_set_sckblock ($ socket) ကိုဖွင့်ရန် socket ကို blocking mode သို့သတ်မှတ်ရန် ( socket_read), socket_readv () , Socket_recv ( ), Socket_recv (), Socket_recv (), Socket_RECV (), Socket_write (), Socket_write (), Socket_write () , စသည်တို့) ကိုဖတ်ရန် socket_set_set_sblock (socket_sblock) ကိုအသုံးပြုပါ။ ဆိုလိုသည်မှာသင်သည်မည်သည့်အချက်အလက်မဆိုဘဲ socket တစ်ခုကိုဖတ်ရန်ကြိုးစားပါ ကအချက်အလက်များကိုဖတ်လို့မရလျှင်ပရိုဂရမ်သည်ထိုကုဒ်နံပါတ်ဖြင့်ရပ်တန့်သွားလိမ့် မည်။
၎င်းသည် "တစ်ပြိုင်နက်တည်းဆက်သွယ်ရေး" ကိုမျှော်လင့်ထားသည့်အချို့သောအခြေအနေများတွင်၎င်းသည်အသုံးဝင်သည်။ သို့သော်ပြင်ပဆာဗာသည်ဖြည်းဖြည်းချင်းတုန့်ပြန်သည် (သို့မဟုတ်ပစ်မှတ်ထားသောဆာဗာ ကို ပိတ်ပစ်ခြင်း, ကွန်ယက်ပိတ်ဆို့ခြင်း, firewall အားဖြင့်ပိတ်ဆို့ခြင်း,
ဥပမာတစ်ခုကိုကြည့်ရအောင်။
<code> $ socket = socket_coceate (af_inet, sock_stream, sol_tcp); Socket_set_Block ($ socket); Socket_Connect ($ socket, 'gitbox.net', 80, Socket_write ($ socket "ကိုရယူပါ / http / 1.0 \ r \ n nhost: gitbox.net \ r \ r \ r \ r \; $ တုံ့ပြန်မှု = socket_read ($ socket, 2048);
ပဲ့တင်သံ $ တုံ့ပြန်မှု;
</ code>
Gitbox.net သည်လက်လှမ်းမမှီပါကမည်သည့်အချက်အလက်မဆိုအချက်အလက်များကိုမပြန်နိုင်ပါက Code socket_read () သည်အကန့်အသတ်မရှိပိတ်ဆို့မှုနှင့်အစီအစဉ်ကို "စွဲကပ်" လိမ့်မည်။
"မှီဝဲ" ၏အဓိကအကြောင်းရင်းမှာ အချိန်ကုန်အကန့်အသတ်မရှိသည့်အချိန်မရှိကြောင်း ဖြစ်သည်။ ပိတ်ဆို့ခြင်း mode သည်ပြ a နာမဟုတ်ပါ, ပြ problem နာမှာ sociec_set_set_option () တွင်အချိန်ကုန်တန်ဖိုးကိုသတ်မှတ်ခြင်းမဟုတ်ပါ။
PHP သည် societ timeout ချိန်ညှိချက်များကိုပေးသည်။
အချိန်ကုန်ကိုလက်ခံရရှိသည်
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec'=>5, 'usec'=>0]);
အချိန်ကိုပို့ပါ
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ['sec'=>5, 'usec'=>0]);
ဤအရာများကိုထည့်သွင်းပြီးနောက်တွင်ပိတ်ဆို့ခြင်း mode တွင်ပင်ဖတ်ပြီးရေးခြင်းစစ်ဆင်ရေးများအစဉ်အမြဲမစောင့်ပါနှင့်။ ဥပမာအားဖြင့်လက်ခံရရှိသည့်အချိန်ကို 5 စက္ကန့်ခန့်သတ်မှတ်ထားသည်။ 5 စက္ကန့်အတွင်းဒေတာကိုမရရှိပါက socket_read () သည် မှားယွင်းစွာ မအောင်မြင်ပါ။
သင်အချိန်ကုန်ကိုသတ်မှတ်ရန်မေ့နေလျှင်ဖြစ်နိုင်ချေရှိသောအကျိုးဆက်များစွာရှိသည်။
ဆာဗာသည်ပြန်လည်ဖြေကြားခြင်းမရှိပါ
အသုံးပြုသူသည်ရှည်လျားစွာစောင့်ဆိုင်းနေပြီးအလွန်ညံ့ဖျင်းသောအတွေ့အကြုံရှိသည်
အသုတ်အလုပ်တစ်ခုတွင်ပိတ်ဆို့ခြင်းသည်ခြုံငုံအလုပ်ကိုတန်းစီရန်သို့မဟုတ်ကြားဖြတ်ရန်ပင်ဖြစ်စေသည်။
ပြ problems နာများကိုဖြေရှင်းရန်ခက်ခဲသည်,
ထို့ကြောင့် ပိတ်ဆို့ခြင်း mode တွင်မည်သည့်ကွန်ယက်ကိုလည်ပတ်မှုမဆိုရှင်းလင်းသောအချိန်ကုန်ခံခြင်းဖြင့်အသုံးပြုသင့်သည် ။
ဟုတ်ကဲ့, အကယ်. သင်သည် Socket_set_Set_Block () အချိန်ကုန်ကိုသတ်မှတ်ရန်နှင့်အချိန်ကုန်ရန်မေ့နေလျှင်, အစီအစဉ်သည်အချို့သောကိစ္စရပ်များတွင် "ဟောင်းနွမ်း" နိုင်သည်။ ၎င်းသည် PHP တွင် bug မဟုတ်ဘဲကွန်ယက်ပရိုဂရမ်တွင် I / O ကိုပိတ်ဆို့ခြင်း၏အခြေခံကျသောအပြုအမူတစ်ခုဖြစ်သည်။ timeouts ကိုသတ်မှတ်ရန် timeouts များကိုသတ်မှတ်ရန် Timeout_Set_option () ကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည်ပရိုဂရမ်အားစိတ်ဓာတ်ကျခြင်းနှင့်တုန့်ပြန်မှုကိုသေချာစေရန်သော့ချက်ဖြစ်သည်။
အကောင်းဆုံးအလေ့အကျင့် မှာ - သင်ပိတ်ဆို့ခြင်း mode ကိုရိုက်ထည့်နေသရွေ့အချိန်ကုန်ကိုချက်ချင်းထားပါ, ဝေးလံခေါင်သီသောဆာဗာ၏ယုံကြည်စိတ်ချရမှုကိုအားမကိုးပါနှင့်။ ၎င်းသည်ခုခံကာကွယ်သည့်ပရိုဂရမ်၏အခြေခံစဉ်းစားတွေးခေါ်မှုတစ်ခုဖြစ်သည်။