မကြာခဏဆိုသလို PHP တွင်ပါ 0 င်သည့်တစ်ပြိုင်နက်တည်း http တောင်းဆိုမှုများကိုအထူးသဖြင့် PHP တွင်မြင့်မားသော http တောင်းဆိုမှုများပြုလုပ်သောအခါမကြာခဏဆိုသလို အရင်းအမြစ်များကို ထုတ်လွှတ်ပေးခြင်းနှင့်ထုတ်လွှတ်မှုထုတ်ပေးနိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် curl_share_init function သည် DNS cache, cookies များစသည့်အတိအကျအရင်းအမြစ်များကိုမျှဝေရန်နည်းလမ်းဖြစ်သည်။
ဤဆောင်းပါးသည် curl_share_init function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးပြီးထိရောက်သောပကတိရေကူးကန်စီမံခန့်ခွဲမှုယန္တရားကိုအကောင်အထည်ဖော်ရန်အရာဝတ်ထု ဦး တည်သည့်နည်းလမ်းတွင်၎င်းကို encapsate လုပ်ပါလိမ့်မည်။
curl_share_init () သည် libcurl မှ shocurl မှပေးသောလက်ကိုင်ကိုအစပျိုးရန်ထောက်ပံ့ပေးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်အောက်ပါအရင်းအမြစ်များကိုမျှဝေရန်ဆံပင်ကောက်ကောက်အမျိုးမျိုးကိုခွင့်ပြုသည်။
Cookie ဒေတာ
dns cache
SSL session ကိုသတင်းအချက်အလက်
connection pool
အရင်းအမြစ်များကိုဝေမျှရန်အဓိကသော့ချက်မှာ curl_setopt ကို curl_setopt ကို သုံး. ဆံပင်ကောက်ကောက်တစ်ခုစီအတွက်ကိုင်တွယ်ရန်ကိုင်တွယ်ရန်ဖြစ်သည်။
curl_setopt($ch, CURLOPT_SHARE, $shareHandle);
မျှဝေထားသောလက်ကိုင်ကို curl_share_init () နှင့် curl_share_setopt () မှတဆင့် configure လုပ်ထားသည်။
ကျွန်ုပ်တို့သည်မျှဝေထားသောလက်ကိုင်များဖန်တီးမှု, စီမံခန့်ခွဲမှုနှင့်ဖျက်ဆီးခြင်းကိုဖုံးအုပ်ထားသည့်ရိုးရှင်းသောအရင်းအမြစ်ရေကူးကန်စီမံခန့်ခွဲမှုအတန်းကိုဒီဇိုင်းဆွဲနိုင်သည်။
class CurlSharePool
{
private static $instance = null;
private $shareHandle;
private function __construct()
{
$this->shareHandle = curl_share_init();
curl_share_setopt($this->shareHandle, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($this->shareHandle, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($this->shareHandle, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
}
public static function getInstance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function getShareHandle()
{
return $this->shareHandle;
}
public function __destruct()
{
if ($this->shareHandle) {
curl_share_close($this->shareHandle);
}
}
}
Shared အရင်းအမြစ်ရေကန်ကို သုံး. HTTP တောင်းဆိုမှုများကိုပေးပို့ခြင်း၏ဥပမာတစ်ခုမှာ -
$urls = [
"https://m66.net/api/v1/data1",
"https://m66.net/api/v1/data2",
"https://m66.net/api/v1/data3"
];
$share = CurlSharePool::getInstance()->getShareHandle();
$multiHandle = curl_multi_init();
$curlHandles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SHARE, $share);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle);
} while ($running > 0);
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . PHP_EOL;
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
curl_multi_close($multiHandle);
မျှဝေထားသောလက်ကိုင်များကိုအသုံးပြုခြင်း၏အကြီးမားဆုံးအားသာချက်မှာ DNS ကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့် SSL ဆက်သွယ်မှုများကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာခြင်းကိုရှောင်ရှားရန်နှင့် SSL ဆက်သွယ်မှုများကိုပြန်လည်ထူထောင်ခြင်းနှင့်ပြန်လည်ဖွဲ့စည်းခြင်းများကိုပြန်လည်ထူထောင်ခြင်းများကိုရှောင်ရှားခြင်းများကိုရှောင်ရှားနိုင်သည်။ Encapsulations အတန်းများကိုအသုံးပြုခြင်းသည်အရင်းအမြစ်စီမံခန့်ခွဲမှုများကိုရိုးရှင်းအောင်ပြုလုပ်ခြင်း, အရင်းအမြစ်ယိုစိမ့်မှုများကိုရှောင်ရှားနိုင်ပြီးနောက်ပိုင်းပြုပြင်ထိန်းသိမ်းမှုနှင့်တိုးချဲ့မှုကိုပိုမိုအထောက်အကူပြုနိုင်သည်။
curl_share_init သည် PHP တွင်အသုံးမ 0 င်သော်လည်းစွမ်းဆောင်ရည်မြင့်မားသောလိုအပ်ချက်များရှိသောစနစ်များတွင်ကုန်ကျစရိတ်နည်းသောအကောင်းဆုံးနည်းလမ်းကိုထောက်ပံ့ပေးသည်။ မျှဝေထားသောလက်ကိုင်များ၏အရာဝတ်ထုစီမံခန့်ခွဲမှုပုံစံကို encapsulating အားဖြင့်ကျွန်ုပ်တို့သည်ပိုမိုထိရောက်သောတည်ငြိမ်သောအရင်းအမြစ်ပြန်လည်သုံးသပ်ခြင်းကိုရရှိနိုင်ပါသည်။
လက်တွေ့ကျသော application များအရဤအမျိုးအစားသည်သယံဇာတများအမျိုးအစားများကိုထောက်ပံ့သောချည်မျှင်များကိုထောက်ပံ့ခြင်း, ချည်မျှင်များကိုထောက်ပံ့သောချည်မျှင်များကိုအထောက်အကူပြုရန်, ဤအမျိုးအစားကိုထပ်မံတိုးချဲ့နိုင်သည်။