လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အဘယ်ကြောင့် curl_closen တောင်းဆိုမှုအပြီးချက်ချင်း connects အားလုံးကို currlose controls မနိုင်ပါ။

အဘယ်ကြောင့် curl_closen တောင်းဆိုမှုအပြီးချက်ချင်း connects အားလုံးကို currlose controls မနိုင်ပါ။

gitbox 2025-05-29

PHP တွင်ဆံပင်ကောက်ကောက်သည် HTTP တောင်းဆိုမှုများကိုပြုလုပ်ရန်အတွက်အလွန်အသုံးများသောစာကြည့်တိုက်ဖြစ်သည်။ ၎င်းသည်အခြားဆာဗာများနှင့်အပြန်အလှန်ဆက်သွယ်ရန်ပြောင်းလွယ်ပြင်လွယ်။ ထိရောက်သောနည်းလမ်းဖြင့် developer များကိုထောက်ပံ့ပေးသည်။ များသောအားဖြင့်ကျွန်ုပ်တို့သည် curl_init () ကို သုံး. တောင်းဆိုမှုကို execute လုပ်ရန် curl_exec () ကို ပိတ်ရန် curl_cece () ကိုသုံးရန် Curl_Close () ကို သုံးပါ။

သို့သော်ကျွန်ုပ်တို့၏ code တွင် curl တောင်းဆိုမှုများစွာကိုကျွန်ုပ်တို့ကွပ်ကဲသောအခါ curl_close () function ကိုအသုံးပြုခြင်းသည် converse () function ကိုအသုံးပြုခြင်းသည် connection အားလုံးကိုချက်ချင်းမပိတ်နိုင်ကြောင်းကျွန်ုပ်တို့တွေ့ရှိနိုင်သည်။ ဤပြ problem နာအတွက်အကြောင်းပြချက်မှာ curl_close () curl_close () curl_close () သည် လက်ရှိဆံပင်ကောက်ကောက်အပိုင်းကိုပိတ်ထားရုံသက်သက်သာ 0 ုစင်အုပ်ချိတ်ဆက်မှုများကိုချက်ချင်းမဖျက်ဆီးနိုင်ပါ။

1 ။ curl တောင်းဆိုမှုများ၏ asynchronous execution ကိုရှင်းပြပါ

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

2 ။ curl_close ၏အခန်းကဏ်။ ()

curl_close () function ၏လုပ်ဆောင်ချက်သည် curl_close (curl session တစ်ခုကိုပိတ်ပြီး session နှင့်ဆက်စပ်သောအရင်းအမြစ်များကိုထုတ်လွှတ်ရန်ဖြစ်သည်။ သို့သော် session တစ်ခုကိုပိတ်ခြင်းသည်ဆက်သွယ်မှုအားလုံးကိုချက်ချင်းပြန်လွှတ်ပေးလိမ့်မည်ဟုမဆိုလိုပါ။ အထူးသဖြင့်တောင်းဆိုမှုများစွာကိုအပြိုင်ဖြင့်ကွပ်မျက်ခံရသောအခါဆက်သွယ်မှုများကိုပိတ်ခြင်းနှင့်အရင်းအမြစ်များကိုလွှတ်ပေးခြင်းကိုနှောင့်နှေးစေနိုင်သည်။ ဘာဖြစ်လို့လဲဆိုတော့ဒါကစာကြည့်တိုက်သည်တောင်းဆိုမှုများအတွက်ဆက်သွယ်မှုရေကူးကန်ကိုအသုံးပြုသောကြောင့်၎င်းသည်တောင်းဆိုမှုများမပြည့်မီသည်အထိဆက်သွယ်မှုအားလုံးကိုချက်ချင်းမရှင်းလင်းသောကြောင့်ဖြစ်သည်။

 // မျိုးစုံဖန်တီးပါ cURL ရုံးထိုင်အချိန်ကာလ
$ch1 = curl_init('http://gitbox.net/example1');
$ch2 = curl_init('http://gitbox.net/example2');
$ch3 = curl_init('http://gitbox.net/example3');

// တောင်းဆိုမှုရွေးစရာများကိုသတ်မှတ်ပါ
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);

// တောင်းဆိုမှုနှင့်စတိုးဆိုင်များကို execute and store
$response1 = curl_exec($ch1);
$response2 = curl_exec($ch2);
$response3 = curl_exec($ch3);

// 关闭ရုံးထိုင်အချိန်ကာလ
curl_close($ch1);
curl_close($ch2);
curl_close($ch3);

အထက်ပါကုဒ်တွင် curl_close () ကို curl_close () တစ်ခုချင်းစီကိုပိတ်ရန် CONFORE ဟုခေါ်သော်လည်းဆက်သွယ်မှုပိတ်ခြင်းသည်ချက်ချင်းမဖြစ်သင့်ပါ။ ကောက်ကောက်သည်ဆက်နွယ်မှုကိုဆက်လက်ထိန်းသိမ်းထားသည်။

3 ။ ချိတ်ဆက်ရေကူးကန်နှင့် Multi- တောင်းဆိုမှုစီမံခန့်ခွဲမှု

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

သို့သော်ဤချဉ်းကပ်နည်းသည် curl_close () curl_close () curl_close () curl_close () သည် curl_close () ကို ပိတ်ထားသော်လည်း Connection Pool ရှိဆက်သွယ်မှုရေကန်များအားလုံးကိုပြီးစီးရန်နှောင့်နှေးစေနိုင်သည်။

4 ။ ဆက်သွယ်မှုအားလုံးကိုပိတ်ထားရန်မည်သို့သေချာစေရန်နည်း

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

 // မျိုးစုံဖန်တီးပါ cURL ရုံးထိုင်အချိန်ကာလ
$ch1 = curl_init('http://gitbox.net/example1');
$ch2 = curl_init('http://gitbox.net/example2');
$ch3 = curl_init('http://gitbox.net/example3');

// တောင်းဆိုမှုရွေးစရာများကိုသတ်မှတ်ပါ
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);

// acURL多ရုံးထိုင်အချိန်ကာလ句柄
$mh = curl_multi_init();

// 将ရုံးထိုင်အချိန်ကာလ添加到多ရုံးထိုင်အချိန်ကာလ句柄中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
curl_multi_add_handle($mh, $ch3);

// 执行多ရုံးထိုင်အချိန်ကာလ请求
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        // ဖြည့်စွက်ရန်တောင်းဆိုမှုကိုစောင့်ပါ
        curl_multi_select($mh);
    }
} while ($active);

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

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

နိဂုံးချုပ်အားဖြင့်

PHP တွင်တောင်းဆိုမှုများကိုပြုလုပ်ရန်ဆံပင်ကောက်ကောက်ကိုအသုံးပြုသောအခါ curl_close () သည် connects အားလုံးကိုချက်ချင်းမပိတ်ပါ။ အထူးသဖြင့်အပြိုင်တောင်းဆိုမှုများတွင် ဘာဖြစ်လို့လဲဆိုတော့ဒါက curl က connection pools တွေကို Multiplex ဆက်သွယ်မှုကိုမြှင့်တင်ရန်, ဆက်သွယ်မှုအားလုံးကိုအချိန်တိုအတွင်းဖြန့်ချိနိုင်အောင်သေချာစေရန် curl_multi_ * function ကိုသုံးနိုင်သည်။ အပြိုင်တောင်းဆိုမှုများကိုစီမံရန်အတွက်သင် curlulti_ * function ကိုသုံးနိုင်သည်။ ဤနည်းလမ်းသည် connection လွှတ်ပေးရန်ပြ the နာကိုဖြေရှင်းရုံသာမကတောင်းဆိုမှုဆိုင်ရာကွပ်မျက်မှု၏ထိရောက်မှုကိုလည်းတိုးတက်စေသည်။