လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> allynchronous တောင်းဆိုမှုများတွင်ထပ်ခါတလဲလဲပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန် curl_multi_close ကိုသုံးပါ

allynchronous တောင်းဆိုမှုများတွင်ထပ်ခါတလဲလဲပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန် curl_multi_close ကိုသုံးပါ

gitbox 2025-05-13

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

သို့သော် curl_multi_ * function ကို အသုံးပြု. ပြတ် တောင်း ပြတ်တောင်းတောင်းဆိုမှုများအတွက်အသုံးပြုသောအခါ, curl_multi_cloco_cloco_close function ကို ဖြတ်. curl session တစ်ခုကိုကျွန်ုပ်တို့ပိတ်လိုက်သောအခါ connection ကိုစနစ်တကျစီမံခြင်းမရှိသေးပါကဆက်သွယ်မှုအချို့ကိုစနစ်တကျပိတ်ထားခြင်းမပြုမီထပ်ခါတလဲလဲပိတ်ထားနိုင်သည်။

ဤဆောင်းပါးသည် allynchronous တောင်းဆိုမှုများကိုစီမံရန် PHP တွင် curl_multi_close ကို မည်သို့ကောင်းမွန်စွာအသုံးပြုရမည်ကိုသင့်အားပြလိမ့်မည်။

1 ။ curl_multi_ * function ကိုသုံးရန်အခြေခံအဆင့်များ

ပထမ ဦး စွာ asynchronous တောင်းဆိုမှုများကိုစတင်ရန် PHP ၏ curl_mamulti_ * စီးရီး function ကိုမည်သို့အသုံးပြုရမည်ကိုကြည့်ကြပါစို့။ ဒီနေရာမှာအခြေခံဥပမာတစ်ခုပါ။

 <?php
// မျိုးစုံဖန်တီးပါ cURL ရုံးထိုင်အချိန်ကာလ
$ch1 = curl_init();
$ch2 = curl_init();

// တည်ဆောက်သည် cURL တောင်းဆိုမှုများတောင်းဆိုမှုများ
curl_setopt($ch1, CURLOPT_URL, 'https://gitbox.net/api/endpoint1');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, 'https://gitbox.net/api/endpoint2');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// ဖန်တီး cURL မျိုးစုံလက်ကိုင်
$mh = curl_multi_init();

// တစ်ခုချင်းစီကိုထည့်ပါ cURL ရုံးထိုင်အချိန်ကာလ加入မျိုးစုံလက်ကိုင်
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများပြုလုပ်ပါ
do {
    $status = curl_multi_exec($mh, $active);
} while ($active);

// တစ်ခုချင်းစီကိုတောင်းဆိုမှု၏ရလဒ်ကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// ရလဒ်ရလဒ်
echo "Response 1: " . $response1 . "\n";
echo "Response 2: " . $response2 . "\n";

// 关闭ရုံးထိုင်အချိန်ကာလ
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
curl_close($ch1);
curl_close($ch2);
?>

ဤဥပမာတွင်ကျွန်ုပ်တို့သည် curl session နှစ်ခုကိုဖန်တီးပြီး Request URL ကိုဖွင့်ပြီး curl_multi_ * function ကို သုံး. တစ်ချိန်တည်းတွင်ထုတ်ပေးရန် curl_multi_ * function ကိုသုံးပါ။ curl_multi_exec သည် တောင်းဆိုမှုများအားလုံးကိုမပြီးမချင်းလည်ပတ်လိမ့်မည်။ ထို့နောက်ကျွန်ုပ်တို့သည်ပြန်လာရလဒ်များရရှိရန်အတွက် curl_multi_getcontent ကို အသုံးပြုသည်။

2 ။ ဆက်သွယ်မှုများထပ်ခါတလဲလဲပိတ်ခြင်းကိုရှောင်ပါ

အထက်ပါကုဒ်များတွင် curl_multi_Close ကို Curl Multi-handle ကိုပိတ်ပြီးတစ် ဦး ချင်းစီကောက်ကောက် seation ကိုပိတ်ရန် curl_close ကို အသုံးပြုခဲ့သည်။ ၎င်းသည်ဘုံအလေ့အကျင့်တစ်ခုဖြစ်သည်, သို့သော် curl_multi_close သည် လက်ကိုင်မျိုးစုံကိုပိတ်ပစ်ရန်သာတာဝန်ရှိကြောင်းသတိပြုသင့်သည်။ curl_multi_close ပိတ်ပစ်ပြီးနောက် curl_close တစ်ခုစီကို curl_close မှတဆင့်ပိတ်ရန်လိုအပ်သည်။

ပြနာ - အကယ်. သင်သည် curl_close သို့မဟုတ် curl_multi_clotose ဟုအကြိမ်ကြိမ်ခေါ်ဆိုပါက, ဒါကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည်နည်းလမ်းနှစ်မျိုးယူနိုင်သည်။

  1. တစ် ဦး ချင်းစီကိုတစ်ကြိမ်သာပိတ်ထားသေချာအောင်လုပ်ပါ ကွင်းဆက်များသို့မဟုတ်ထုတ်ယူခြင်းအတွင်းတွင်ကျွန်ုပ်တို့သည်အချို့သောအစည်းအဝေးများကိုအကြိမ်ကြိမ်ပိတ်ထားနိုင်သည်။ ဤပြ problem နာကိုရှောင်ရှားရန်ပိတ်သောအခါသင်တစ် ဦး ချင်းစီကိုတစ်ကြိမ်သာပိတ်ထားရန်သေချာစေရန်သင်အမှတ်အသားပြုနိုင်သည်။

  2. ပထမ ဦး ဆုံးလက်ကိုင်ကိုဖယ်ရှားပြီးနောက်ပိတ်ပါ လက်ကိုင်ကိုဖယ်ရှားရန် Curl_multi_remove_Handle ကို သုံးပါ။ curl_mamulti_close ဟုခေါ်သောအခါ၎င်းသည်တံခါးပိတ်လက်ကိုင်များကိုရှောင်ရှားသည်။

3 ။ တိုးတက်လာသောကုဒ်များဥပမာ

ထပ်ခါတလဲလဲ connection များကိုထပ်ခါတလဲလဲပိတ်ခြင်းကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည် Code ကိုတိုးတက်အောင်ပြုလုပ်ခဲ့သည်။

 <?php
// မျိုးစုံဖန်တီးပါ cURL ရုံးထိုင်အချိန်ကာလ
$ch1 = curl_init();
$ch2 = curl_init();

// တည်ဆောက်သည် cURL တောင်းဆိုမှုများတောင်းဆိုမှုများ
curl_setopt($ch1, CURLOPT_URL, 'https://gitbox.net/api/endpoint1');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, 'https://gitbox.net/api/endpoint2');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// ဖန်တီး cURL မျိုးစုံလက်ကိုင်
$mh = curl_multi_init();

// တစ်ခုချင်းစီကိုထည့်ပါ cURL ရုံးထိုင်အချိန်ကာလ加入မျိုးစုံလက်ကိုင်
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// ပြတ်တောင်းပြတ်တောင်းတောင်းဆိုမှုများပြုလုပ်ပါ
do {
    $status = curl_multi_exec($mh, $active);
} while ($active);

// တစ်ခုချင်းစီကိုတောင်းဆိုမှု၏ရလဒ်ကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// ရလဒ်ရလဒ်
echo "Response 1: " . $response1 . "\n";
echo "Response 2: " . $response2 . "\n";

// 移除句柄后再关闭ရုံးထိုင်အချိန်ကာလ
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);

// မှန်ကန်စွာပိတ်ပါ
curl_multi_close($mh);
curl_close($ch1);
curl_close($ch2);
?>

4 ။ အကျဉ်းချုပ်

  1. စွမ်းဆောင်ရည်တိုးတက်စေရန် asynchronous တောင်းဆိုမှုများကိုထိရောက်စွာစတင်ရန် curl_multi_ * function ကိုသုံးပါ။

  2. curl session တစ်ခုကိုပိတ်လိုက်သည့်အခါ curl_multi_remove_handle ကို သေချာစွာအသုံးပြုပါ, ထို့နောက် curl_multi_close ဟုခေါ်သည်။

  3. Curl_Close မှတဆင့် curl_close မှတဆင့် curl_close မှတဆင့် curl_multi_close အတွက်ထပ်ခါတလဲလဲပိတ်ခြင်းကိုရှောင်ရှားသင့်သည်။

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