PHP တွင်ထိရောက်သောကွန်ယက်တောင်းဆိုမှုများကိုပြုလုပ်သောအခါ HTTP တောင်းဆိုမှုများကိုစတင်ရန် Curl ကိုအသုံးပြုရန်လိုအပ်သည်။ သို့သော်အချို့သောအရင်းအမြစ်များ (ဥပမာ cookies များ, ဖိုင်ဖော်ပြရန်စသည်တို့ကဲ့သို့ဖိုင်များကဲ့သို့သောအရင်းအမြစ်များ) ကိုကောက်ကောက်များအကြားဝေမျှရန်လိုအပ်သည့်အခါရိုးရာဆံပင်ကောက်ကောက်တောင်းဆိုမှုများသည်သယံဇာတများပြိုင်ပွဲနှင့်ထပ်တူပြုခြင်းနှင့်ထပ်တူပြုခြင်းကိစ္စများကြုံတွေ့ရနိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် PHP သည် curl_share_init function ကိုထောက်ပံ့ပေးသည်။ PHP subprocesses မျိုးစုံတွင်မျှဝေထားသောအရင်းအမြစ်ထပ်တူပြုခြင်းကိုအောင်မြင်ရန် Curl_share_init ကို အသုံးပြုရန်ဤဆောင်းပါးသည်နက်ရှိုင်းစွာလေ့လာပါမည်။
curl_share_init သည် PHP တွင် function function function ကိုမျှဝေထားသောဆံပင်ကောက်ကောက်ကိုဖန်တီးရန်ဖြစ်သည်။ အရင်းအမြစ်များကိုမျှဝေရန် curl တောင်းဆိုမှုများကိုကူညီနိုင်သည်။ မျှဝေထားသောအရင်းအမြစ်များသည် cookies များ, descriptors များ, dns cacts များစသည်တို့သည်မျှဝေထားသောအရင်းအမြစ်များကိုအသုံးပြုခြင်းသည်မျှဝေထားသောအရင်းအမြစ်များကိုအသုံးပြုခြင်းအားဖြင့်တူညီသောသတင်းအချက်အလက်များကိုထပ်ခါတလဲလဲတင်ပြခြင်းမှတောင်းဆိုခြင်းကိုတားဆီးနိုင်သည်။
ကောက်ကောက်မျှဝေခြင်းအရင်းအမြစ်များသည်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းကအလွန်အသုံးဝင်သည်။ ဥပမာအားဖြင့်, curl တောင်းဆိုမှုများစွာသည်တူညီသော 0 က်ဘ်ဆိုက်တစ်ခုသို့ 0 င်ရောက်ရန်လိုအပ်ပါက၎င်းတို့သည် cookies များကိုမျှဝေခြင်းဖြင့်တောင်းဆိုမှုများကိုတုန့်ပြန်ခြင်း, ထို့အပြင် Shared DNS Cache ကိုအသုံးပြုခြင်းသည် DNS မေးမြန်းချက်များကိုမကြာခဏလျှော့ချပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။
curl_share_init ကို curl မျိုးစုံလက်ကိုင်များနှင့်ဆက်စပ်နိုင်သည့်မျှဝေထားသောအရင်းအမြစ်လက်ကိုင်ကိုဖန်တီးရန်အသုံးပြုသည်။ အသုံးပြုရန်အတွက်အခြေခံအဆင့်များမှာအောက်ပါအတိုင်းဖြစ်သည် -
curl_share_init ကိုသုံးပါ။
တိကျသောအရင်းအမြစ်များကိုမျှဝေရန်မျှဝေထားသောလက်ကိုင်တစ်ခုအား (ကွတ်ကီးများ, DNS, ဖိုင်များ descriptors စသည်တို့) ကိုမျှဝေရန်ပြင်ဆင်ပါ။ ) ။
မျိုးစုံဆံပင်ကောက်ကောက်တောင်းဆိုမှုများနှင့်အတူ shared လက်ကိုင်တွဲဖက်။
ဆံပင်ကောက်ကောက်တောင်းဆိုမှုများပြုလုပ်ပြီးအရင်းအမြစ်များကိုမျှဝေရန်သေချာအောင်လုပ်ပါ။
နောက်ဆုံးတွင်မျှဝေထားသောလက်ကိုင်နှင့်ဆံပင်ကောက်ကောက်ကိုထုတ်လွှတ်ပါ။
<?php
// အဆိုပါ shared လက်ကိုင်ကိုအစပျိုး
$share = curl_share_init();
// မျှဝေထားသောအရင်းအမြစ်များကို configure(ဥပမာအားဖြင့် cookies)
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
// မျိုးစုံဖန်တီးပါ cURL လက်ကိုင်
$curl1 = curl_init('http://m66.net/api/endpoint1');
$curl2 = curl_init('http://m66.net/api/endpoint2');
// 将共享လက်ကိုင်与 cURL လက်ကိုင်关联
curl_setopt($curl1, CURLOPT_SHARE, $share);
curl_setopt($curl2, CURLOPT_SHARE, $share);
// အခြား set up cURL ရွေးချယ်စရာများ
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);
// တောင်းဆိုမှုကို execute
$response1 = curl_exec($curl1);
$response2 = curl_exec($curl2);
// ရလဒ်ရလဒ်
echo "Response 1: " . $response1 . "\n";
echo "Response 2: " . $response2 . "\n";
// အရင်းအမြစ်များကိုအခမဲ့
curl_share_close($share);
curl_close($curl1);
curl_close($curl2);
?>
အထက်ပါကုဒ်တွင် Curl_Share_init $ မျှဝေ ထားသောလက်ကိုင်တစ်ခုဖန်တီးပြီး curl_share_setopt ကို cookies အချက်အလက်များကိုမျှဝေရန် curl_share_settop ကိုသုံးပါ။ ထို့နောက်ကျွန်ုပ်တို့သည် $ curl1 နှင့် $ curl2 ကို curl 4 နှင့် curl2 ကို ဖန်တီး. CurloPt_Share option မှတဆင့်မျှဝေထားသောလက်ကိုင်များကိုသူတို့နှင့်တွဲဖက်ချိတ်ဆက်ထားသည်။ တောင်းဆိုမှုကိုကွပ်မျက်ပြီးနောက်ကျနော်တို့ဆံပင်ကောက်ကောက်လက်ကိုင်နှင့် shared လက်ကိုင်ကိုပိတ်လိုက်တယ်။
အထူးသဖြင့် PHP ၏ PCNTL_Fork ကို ကလေးဖြစ်စဉ်များစွာကိုဖန်တီးရန် PHP ၏ PCNTL_Fork ကိုအသုံးပြုသောအခါကျွန်ုပ်တို့သည်အရင်းအမြစ်များကိုမျှဝေရန် Curl_share_init ကို သုံးနိုင်သည်။ ကလေးဖြစ်စဉ်တစ်ခုချင်းစီသည်တူညီသောအရင်းအမြစ်ကိုမျှဝေနိုင်သည်။
<?php
// အဆိုပါ shared လက်ကိုင်ကိုအစပျိုး
$share = curl_share_init();
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
// ဖန်တီး cURL လက်ကိုင်
$curl1 = curl_init('http://m66.net/api/endpoint1');
$curl2 = curl_init('http://m66.net/api/endpoint2');
// 将共享လက်ကိုင်与 cURL လက်ကိုင်关联
curl_setopt($curl1, CURLOPT_SHARE, $share);
curl_setopt($curl2, CURLOPT_SHARE, $share);
// ဖန်တီးလက်အောက်ခံ
$pid = pcntl_fork();
if ($pid == -1) {
// အမှားကိုင်တွယ်
die("Fork failed!");
} elseif ($pid == 0) {
// လက်အောက်ခံ 1
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true);
$response1 = curl_exec($curl1);
echo "Child Process 1 Response: " . $response1 . "\n";
curl_close($curl1);
} else {
// အဓိကလုပ်ငန်းစဉ်
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);
$response2 = curl_exec($curl2);
echo "Parent Process Response: " . $response2 . "\n";
curl_close($curl2);
// 等待လက်အောက်ခံ结束
pcntl_wait($status);
}
// Shared အရင်းအမြစ်များကိုအခမဲ့
curl_share_close($share);
?>
ဤဥပမာတွင်ကျွန်ုပ်တို့သည်ပထမ ဦး ဆုံးမျှဝေထားသောအရင်းအမြစ်လက်ကိုင်ကိုပထမ ဦး ဆုံး ဖန်တီး . မျှဝေထားသော cookies များကိုသတ်မှတ်ထားသည်။ ထို့နောက်ကျွန်ုပ်တို့သည် PCNTL_FORK ကို အသုံးပြု. ကလေးဖြစ်စဉ်ကိုဖန်တီးခဲ့သည်။ ကလေးဖြစ်စဉ်တွင်ကျွန်ုပ်တို့သည်အဓိကလုပ်ဆောင်မှုကိုအခြားတောင်းဆိုမှုတစ်ခုအနေဖြင့်အခြားတောင်းဆိုမှုတစ်ခုကွပ်မျက်ခံရချိန်တွင်တစ် ဦး ဆံပင်ကောက်ကောက်ကိုသီးခြားစီကွပ်ကဲသည်။ မျှဝေထားသောအရင်းအမြစ်များမှတစ်ဆင့်အဓိကဖြစ်စဉ်နှင့်ကလေးဖြစ်စဉ်သည်မိတ္တူပွားများတင်ခြင်းကိုရှောင်ရှားနိုင်သည်။
Multi-process ပတ် 0 န်းကျင်တွင်လုပ်ငန်းစဉ်တစ်ခုစီသည်မိဘလုပ်ငန်းစဉ်၏ဖိုင်ဖော်ပြချက်ကိုကူးယူပြီးလုပ်ငန်းစဉ်တစ်ခုစီကိုလွတ်လပ်စွာလည်ပတ်ပြီးမျှဝေထားသောအရင်းအမြစ်များကိုတစ်ပြိုင်တည်းအောင်နိုင်ရန်အရင်းအမြစ်များကိုကူးယူရန်အရင်းအမြစ်များကိုမျှဝေမည်။
Curl_Share_init ကိုအသုံးပြုပြီးသည့်အခါအရင်းအမြစ်ကိုအခမဲ့အခမဲ့ခွင့်ပြုပြီးနောက် curlare_init ကိုပိတ်ထားပါ။
Threads ကို PHP တွင်တိုက်ရိုက်ပံ့ပိုးမှုမရှိပါ။ အကြီးစားတစ်ပြိုင်နက်တည်းနှင့်ဆက်ဆံရာတွင် PCNTL_SHAKE_INIT ကို ပေါင်းစပ်ခြင်းနှင့် curl_share_init များကို ပေါင်းစပ်ရန်စဉ်းစားနိုင်သည်။
curl_share_init ကို အသုံးပြုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် PHP ကလေးဖြစ်စဉ်များတွင်မျှဝေထားသောအရင်းအမြစ်များကိုတစ်ပြိုင်တည်းချိန်ကိုက်နိုင်သည်။ ၎င်းသည်ကွန်ယက်တောင်းဆိုမှုစွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်နှင့်မိတ္တူပွားများတင်ခြင်းကိုလျှော့ချရန်အလွန်အထောက်အကူပြုသည်။ အထူးသဖြင့်မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်ရှိသဘာဝပတ်ဝန်းကျင်တွင်မျှဝေထားသောအရင်းအမြစ်များကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည်မလိုအပ်သော overhead ကိုထိထိရောက်ရောက်လျှော့ချနိုင်ပြီးစနစ်ထိရောက်မှုကိုတိုးတက်စေနိုင်သည်။ အရင်းအမြစ်များကိုမျှဝေရန် PCNTL_FORK နှင့် Curl ကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ရှုပ်ထွေးသောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများနှင့်သယံဇာတမျှဝေခြင်းပြ problems နာများကိုပိုမိုကောင်းမွန်သောဖြေရှင်းနိုင်သည်။