လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_set_Set_BLOCK တွင်အချိန်ကုန်ခြင်းယန္တရားကို Post-process လုပ်ရန်မေ့လျော့ရန်အဘယ်ပြ problems နာများဖြစ်ပေါ်စေမည်နည်း။

Socket_set_Set_BLOCK တွင်အချိန်ကုန်ခြင်းယန္တရားကို Post-process လုပ်ရန်မေ့လျော့ရန်အဘယ်ပြ problems နာများဖြစ်ပေါ်စေမည်နည်း။

gitbox 2025-05-29

PHP, Socket_set_set_block () socket_set_set_set_set_set_setblock) အတွက် sockamews အတွက် sockamews အတွက် sockamews ကိုအသုံးပြုတဲ့အခါမှာအလွန်အရေးကြီးတဲ့လုပ်ဆောင်ချက်နှစ်ခုဖြစ်တယ်။ သို့သော်များစွာသော developer များစွာသည်၎င်းကိုပိတ်ဆို့ခြင်းကိုပိတ်ဆို့ပြီးနောက်အဓိကအချက်ကိုလျစ်လျူရှုထားသည်။

ထို့နောက်သင် socket_set_set_block () ကို သုံးလျှင်ဘာဖြစ်မည်နည်း။ ဒီအစီအစဉ်ကိုမှီဝဲမှာလား။ ဤဆောင်းပါးသည်ဤမေးခွန်းကိုအသေးစိတ်ဖြေဆိုပါလိမ့်မည်။

ပိတ်ဆို့ခြင်း mode ကို၏အပြုအမူ

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 ချိန်ညှိချက်များကိုပေးသည်။

  1. အချိန်ကုန်ကိုလက်ခံရရှိသည်

     socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec'=>5, 'usec'=>0]);
    
  2. အချိန်ကိုပို့ပါ

     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 ကိုရိုက်ထည့်နေသရွေ့အချိန်ကုန်ကိုချက်ချင်းထားပါ, ဝေးလံခေါင်သီသောဆာဗာ၏ယုံကြည်စိတ်ချရမှုကိုအားမကိုးပါနှင့်။ ၎င်းသည်ခုခံကာကွယ်သည့်ပရိုဂရမ်၏အခြေခံစဉ်းစားတွေးခေါ်မှုတစ်ခုဖြစ်သည်။