လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> မျှဝေထားသောအရင်းအမြစ်ရေကန်များကိုအကောင်အထည်ဖော်ရန်အရာဝတ်ထု encapsulationsultultulation curl_share ကိုသုံးပါ

မျှဝေထားသောအရင်းအမြစ်ရေကန်များကိုအကောင်အထည်ဖော်ရန်အရာဝတ်ထု encapsulationsultultulation curl_share ကိုသုံးပါ

M66 2025-05-21

မကြာခဏဆိုသလို PHP တွင်ပါ 0 င်သည့်တစ်ပြိုင်နက်တည်း http တောင်းဆိုမှုများကိုအထူးသဖြင့် PHP တွင်မြင့်မားသော http တောင်းဆိုမှုများပြုလုပ်သောအခါမကြာခဏဆိုသလို အရင်းအမြစ်များကို ထုတ်လွှတ်ပေးခြင်းနှင့်ထုတ်လွှတ်မှုထုတ်ပေးနိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် curl_share_init function သည် DNS cache, cookies များစသည့်အတိအကျအရင်းအမြစ်များကိုမျှဝေရန်နည်းလမ်းဖြစ်သည်။

ဤဆောင်းပါးသည် curl_share_init function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးပြီးထိရောက်သောပကတိရေကူးကန်စီမံခန့်ခွဲမှုယန္တရားကိုအကောင်အထည်ဖော်ရန်အရာဝတ်ထု ဦး တည်သည့်နည်းလမ်းတွင်၎င်းကို encapsate လုပ်ပါလိမ့်မည်။

1 ။ Curl_share_init function ကိုမိတ်ဆက်

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 လုပ်ထားသည်။

2 ။ အရာဝတ်ထု -oriented encapsulation နှင့်မျှဝေခြင်းစီမံခန့်ခွဲမှုလူတန်းစား

ကျွန်ုပ်တို့သည်မျှဝေထားသောလက်ကိုင်များဖန်တီးမှု, စီမံခန့်ခွဲမှုနှင့်ဖျက်ဆီးခြင်းကိုဖုံးအုပ်ထားသည့်ရိုးရှင်းသောအရင်းအမြစ်ရေကူးကန်စီမံခန့်ခွဲမှုအတန်းကိုဒီဇိုင်းဆွဲနိုင်သည်။

 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);
        }
    }
}

3 ။ ဥပမာကိုသုံးပါ

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);

4 ။ အားသာချက်ခွဲခြမ်းစိတ်ဖြာ

မျှဝေထားသောလက်ကိုင်များကိုအသုံးပြုခြင်း၏အကြီးမားဆုံးအားသာချက်မှာ DNS ကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့် SSL ဆက်သွယ်မှုများကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာခြင်းကိုရှောင်ရှားရန်နှင့် SSL ဆက်သွယ်မှုများကိုပြန်လည်ထူထောင်ခြင်းနှင့်ပြန်လည်ဖွဲ့စည်းခြင်းများကိုပြန်လည်ထူထောင်ခြင်းများကိုရှောင်ရှားခြင်းများကိုရှောင်ရှားနိုင်သည်။ Encapsulations အတန်းများကိုအသုံးပြုခြင်းသည်အရင်းအမြစ်စီမံခန့်ခွဲမှုများကိုရိုးရှင်းအောင်ပြုလုပ်ခြင်း, အရင်းအမြစ်ယိုစိမ့်မှုများကိုရှောင်ရှားနိုင်ပြီးနောက်ပိုင်းပြုပြင်ထိန်းသိမ်းမှုနှင့်တိုးချဲ့မှုကိုပိုမိုအထောက်အကူပြုနိုင်သည်။

V. နိဂုံးချုပ်

curl_share_init သည် PHP တွင်အသုံးမ 0 င်သော်လည်းစွမ်းဆောင်ရည်မြင့်မားသောလိုအပ်ချက်များရှိသောစနစ်များတွင်ကုန်ကျစရိတ်နည်းသောအကောင်းဆုံးနည်းလမ်းကိုထောက်ပံ့ပေးသည်။ မျှဝေထားသောလက်ကိုင်များ၏အရာဝတ်ထုစီမံခန့်ခွဲမှုပုံစံကို encapsulating အားဖြင့်ကျွန်ုပ်တို့သည်ပိုမိုထိရောက်သောတည်ငြိမ်သောအရင်းအမြစ်ပြန်လည်သုံးသပ်ခြင်းကိုရရှိနိုင်ပါသည်။

လက်တွေ့ကျသော application များအရဤအမျိုးအစားသည်သယံဇာတများအမျိုးအစားများကိုထောက်ပံ့သောချည်မျှင်များကိုထောက်ပံ့ခြင်း, ချည်မျှင်များကိုထောက်ပံ့သောချည်မျှင်များကိုအထောက်အကူပြုရန်, ဤအမျိုးအစားကိုထပ်မံတိုးချဲ့နိုင်သည်။