<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဤကုဒ်၏ဤအပိုင်းသည်ဆောင်းပါး၏အကြောင်းအရာများနှင့်လုံးဝမသက်ဆိုင်ပါ,သာဆန္ဒပြဘို့</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဆက်သွယ်မှုကိုစတင်ရန်...\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
---
</span><span><span class="hljs-comment"># pfsockopen ဆက်သွယ်မှုအပြီးကြီးမားသောဒေတာစီးဆင်းမှုများကိုထိရောက်စွာလုပ်ဆောင်ရန်နှင့်လက်ခံရရှိနည်း?</span></span><span>
တည်နေPHPအလယ်ပိုင်း,`pfsockopen` မြဲ connection များအတွက်တည်ထောင်ရန် function ကိုဖြစ်ပါတယ်,နှစ်ရှည်ဆက်သွယ်မှုလိုအပ်သည့်အခြေအနေများကိုကိုင်တွယ်ရန်သင့်တော်သည်。尤其တည်နေ处理大数据流时,ကျိုးကြောင်းဆီလျော်သောအသုံးပြုမှု `pfsockopen` ပရိုဂရမ်၏စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုကိုများစွာတိုးတက်စေနိုင်သည်。ဤဆောင်းပါးသည် connection မှတည်ထောင်လိမ့်မည်、ဒေတာဖတ်ရှုခြင်း、Buffer Control နှင့်ခြွင်းချက်ကိုင်တွယ်,ထိရောက်စွာလုပ်ဆောင်ရန်နှင့်ကြီးမားသော data streams ကိုလက်ခံရရှိရမည်ကိုဆွေးနွေးပါ。
</span><span><span class="hljs-comment">## 1. အသုံးပြု pfsockopen မြဲ connection ကိုထူထောင်ပါ</span></span><span>
ဆက်နွယ်မှုဆိုင်ရာဆက်သွယ်မှု၏အားသာချက်မှာ connection ကိုတစ်ကြိမ်တည်ထောင်ခြင်းဖြစ်သည်,Multiplexed ဆက်သွယ်မှုကိုတောင်းဆိုခြင်း,လေှျာ့ပေါ့TCPလက်ခုပ်တီး overhead。အဆိုပါခေါ်ဆိုမှုနည်းလမ်းအောက်ပါအတိုင်းဖြစ်ပါတယ်:
```php
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pfsockopen</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-variable">$timeout</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"ဆက်သွယ်မှုမအောင်မြင်ပါ: <span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)\n");
}
</span><span><span class="hljs-comment">// Non-blocking mode ကိုသတ်မှတ်ပါ,တုံ့ပြန်မှုမြန်နှုန်းတိုးတက်စေရန်</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_set_blocking</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span></span>
ဤအချက်ကိုအထူးအလေးပေးဖော်ပြရန်ဤနေရာတွင်အထူးအလေးပေးသည်။
ကြီးမားသောအချက်အလက်များကိုလက်ခံရရှိသည့်အခါအချက်အလက်အားလုံးကိုတစ်ချိန်တည်းတွင်ဖတ်ရှုခြင်းသည်မှတ်ဥာဏ်ပေါက်ကွဲမှုသို့အလွယ်တကူရနိုင်သည်။ ကျိုးကြောင်းဆီလျော်သောချဉ်းကပ်မှုသည်အပိုင်းအစများတွင်ဖတ်ရန်ဖြစ်သည်။
<span><span><span class="hljs-variable">$bufferSize</span></span><span> = </span><span><span class="hljs-number">8192</span></span><span>; </span><span><span class="hljs-comment">// 8KBBuffer အရွယ်အစား</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>)) {
</span><span><span class="hljs-variable">$chunk</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-variable">$bufferSize</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$chunk</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-comment">// အမှားကိုင်တွယ်မှုကိုဖတ်ပါ</span></span><span>
</span><span><span class="hljs-keyword">break</span></span><span>;
}
</span><span><span class="hljs-variable">$data</span></span><span> .= </span><span><span class="hljs-variable">$chunk</span></span><span>;
</span><span><span class="hljs-comment">// ဒေတာတစ်ခုချင်းစီကိုပိတ်ပင်တားဆီးမှုလုပ်ငန်းစဉ်,ဥပမာအားဖြင့်ဖိုင်တစ်ခုသို့စာရေးခြင်း、ပိတ်ပင်တားဆီးမှုခွဲခြမ်းစိတ်ဖြာခြင်းဖြင့်ပိတ်ပင်တားဆီးမှုစသည်တို့ကို</span></span><span>
}
</span></span>
၎င်းသည်အချက်အလက်များကိုဖတ်နေစဉ်အပြောင်းအလဲကိုပြုလုပ်ပေးသည်။
Default Buffer အရွယ်အစားနှင့်အချိန်ကုန်ခြင်းသည်ကြီးမားသောဒေတာများကို streaming အတွက်သင့်တော်မည်မဟုတ်ပါ။ သင့်တော်သောအချိန်ကုန်ကို stream_set_timeout မှတဆင့်သတ်မှတ်နိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">stream_set_timeout</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// တည်ဆောက်သည်10ဒုတိယအကြိမ်အချိန်</span></span><span>
</span></span>
နှင့် ကြားခံ အရွယ်အစားကိုချိန်ညှိခြင်းဖြင့်အမြန်နှုန်းနှင့်မှတ်ဉာဏ်သုံးစွဲမှုကိုချိန်ညှိပါ။
ဒေတာစီးဆင်းမှုသည်စာသားသို့မဟုတ်စနစ်တကျအချက်အလက်များရှိပါကအချက်အလက်များ decoding သို့မဟုတ် decompression များအတွက် stream filter ကိုသုံးပြီးစဉ်းစားပါ။ ဥပမာအားဖြင့်:
<span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-string">"zlib.inflate"</span></span><span>, STREAM_FILTER_READ);
</span></span>
၎င်းသည်သင့်အား decompressed data များကိုတိုက်ရိုက်ဖတ်ရန်ခွင့်ပြုသည်။
အသုံးပြုပြီးနောက်အရင်းအမြစ်ယိုစိမ့်မှုကိုရှောင်ရှားရန်ဆက်သွယ်မှုကိုမှန်ကန်စွာပိတ်ပါ။
<span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span></span>
အထူးသဖြင့်စဉ်ဆက်မပြတ်ဆက်သွယ်မှုအခြေအနေများတွင် connection pool ကိုမဖြိုဖျက်နိုင်အောင်အရင်းအမြစ်များကိုအချိန်မီလွှတ်ပေးရန်လိုအပ်သည်။
Big Data Streams ကိုလုပ်ဆောင်ရန် PFSocCkopen ကို အသုံးပြုသောအခါအဓိကအချက်များမှာ -
ပိတ်ဆို့ခြင်းမဟုတ်သော mode နှင့်ကျိုးကြောင်းဆီလျော်သောကြားခံအရွယ်အစားကိုသုံးပါ။
မှတ်ဥာဏ်ပေါက်ကွဲမှုများကိုရှောင်ရှားရန်အတုံးများတွင်အချက်အလက်များကိုဖတ်ပါ။
flow filter ကိုပေါင်းစပ်ခြင်းအချက်အလက်အပြောင်းအလဲနဲ့ထိရောက်မှုကိုတိုးတက်စေသည်။
ပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်ကျိုးကြောင်းဆီလျော်သောအချိန်ကုန်ကိုသတ်မှတ်ပါ။
ပြီးစီးပြီးနောက်အချိန်အတွက် connection ကိုပိတ်ပါ။
အထက်ပါနည်းလမ်းဖြင့် PHP အစီအစဉ်သည်ကြီးမားသောအချက်အလက်များစီးဆင်းမှုကိုထိရောက်စွာနှင့်တည်ငြိမ်စွာပြုလုပ်နိုင်သည်။
<span></span>