PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင်အထူးသဖြင့်ကွန်ယက်တောင်းဆိုမှုများသို့မဟုတ်ဒေတာဘေ့စ်ဆက်သွယ်မှုအမြောက်အများလိုအပ်သည့်အခါတစ်ကိုယ်ရေချည်နှောင်ခြင်းလုပ်ငန်းများအတွက် synchronization synchronization စစ်ဆင်ရေးများသည်အစီအစဉ်၏အဓိကစွမ်းအင်ကိုထိခိုက်စေပြီးဖြစ်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန်ကျွန်ုပ်တို့သည် connection pasterments များနှင့်အပြိုင်ပြုပြင်ခြင်းကိုဖန်တီးခြင်းဖြင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။ ဤဆောင်းပါးသည် PHP ၏ Connect () function ကိုဥပမာအားဖြင့်ဥပမာအားဖြင့် connection မျိုးစုံကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုရှင်းပြရန်နှင့်လုပ်ငန်းလည်ပတ်မှုကိုအရှိန်မြှင့်တင်ရန်အပြိုင်အပြောင်းအလဲများကိုအသုံးပြုသည်။
ရိုးရာ PHP code ကိုမကြာခဏထပ်တူပြုခြင်း,
<?php
function connect($url) {
// Simulation တောင်းဆိုမှု
$content = file_get_contents($url);
return $content;
}
$urls = [
'http://example.com/api/1',
'http://example.com/api/2',
'http://example.com/api/3',
];
foreach ($urls as $url) {
$result = connect($url);
echo $result . "\n";
}
?>
အထက်ပါကုဒ်တွင်တောင်းဆိုမှုတစ်ခုစီသည်နောက်ဆုံးပြီးစီးရန်စောင့်ဆိုင်းရမည်ဖြစ်သည်။ အကယ်. တောင်းဆိုမှုတစ်ခုစီသည် 1 စက္ကန့်ကြာလျှင် 3 စက္ကန့်လုံးပြီးစီးရန် 3 စက္ကန့်ကြာပါသည်။
တောင်းဆိုမှုတစ်ခုစီအတွက်လွတ်လပ်သောဆက်သွယ်မှုဥပမာတစ်ခုကိုကျွန်ုပ်တို့ဖန်တီးနိုင်သည်။
<?php
class Connector {
private $url;
public function __construct($url) {
$this->url = $url;
}
public function connect() {
return file_get_contents($this->url);
}
}
$urls = [
'http://m66.net/api/1',
'http://m66.net/api/2',
'http://m66.net/api/3',
];
$connectors = [];
foreach ($urls as $url) {
$connectors[] = new Connector($url);
}
ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည်တောင်းဆိုမှုတစ်ခုစီကိုအရာဝတ်ထုတစ်ခုထဲသို့ထည့်သွင်းထားသော်လည်းတောင်းဆိုမှုကိုတစ်ပြိုင်တည်းချိန်ကိုက်နေဆဲဖြစ်သည်။
PHP သည်အပြိုင်အဆိုင်များကိုအကောင်အထည်ဖော်ရန်နည်းလမ်းများစွာကိုထောက်ပံ့သည်။
တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများပြုလုပ်ရန်လုပ်ဆောင်ချက်များ၏ curl_multi_ * စီးရီးကိုသုံးပါ။
multithreading (ဥပမာ အင်္ဂါ hears extension) ၏အားသာချက်ကိုရယူပါ။
irtphpp ကဲ့သို့သော allynchronous စာကြည့်တိုက်များကိုသုံးပါ။
ဤနေရာတွင် curl_multi ကို အပြိုင်ဆက်စပ်မှုရှိသည့်အခြေအနေမျိုးစုံကိုမည်သို့လုပ်ဆောင်ရမည်ကိုပြသရန်ဥပမာတစ်ခုအဖြစ်အသုံးပြုသည်။
<?php
class Connector {
private $url;
private $ch;
public function __construct($url) {
$this->url = $url;
$this->ch = curl_init();
curl_setopt($this->ch, CURLOPT_URL, $this->url);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
}
public function getCurlHandle() {
return $this->ch;
}
public function getContent() {
return curl_multi_getcontent($this->ch);
}
}
<?php
$urls = [
'http://m66.net/api/1',
'http://m66.net/api/2',
'http://m66.net/api/3',
];
$connectors = [];
foreach ($urls as $url) {
$connectors[] = new Connector($url);
}
$multiHandle = curl_multi_init();
foreach ($connectors as $connector) {
curl_multi_add_handle($multiHandle, $connector->getCurlHandle());
}
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle);
} while ($running > 0);
foreach ($connectors as $connector) {
$content = $connector->getContent();
echo $content . "\n";
curl_multi_remove_handle($multiHandle, $connector->getCurlHandle());
}
curl_multi_close($multiHandle);
curl_multi မှတစ်ဆင့်ကျွန်ုပ်တို့သည်တစ်ချိန်တည်းတွင် http တောင်းဆိုမှုများကိုစတင်နိုင်ပြီးအချိန်ကုန်သက်သာစေရန်နှင့်အပြောင်းအလဲများပြုလုပ်ရန်တောင်းဆိုမှုများအားလုံးကိုစောင့်ဆိုင်းနေပြီးတစ်ချိန်တည်းမှာပင်စောင့်ဆိုင်းနေသည့်အချိန်ကိုအလွန်သက်သာစေသည်။
ဆက်သွယ်မှုများကို Encapsatfulate လုပ်ရန်နှင့်ဆက်သွယ်မှုကိုလွယ်ကူစွာစီမံခန့်ခွဲရန်ဆက်သွယ်မှုများစွာကိုဖန်တီးရန် Connect () function ကိုသုံးပါ။
တောင်းဆိုမှုများကိုအပြိုင်လုပ်ဆောင်ရန် PHP ၏ curl_multi စီးရီးများကိုအသုံးပြုပါ။
Parallel Procession သည်ကွန်ယက်တောင်းဆိုမှုများသို့မဟုတ်ဆက်သွယ်မှုများ၏ထိရောက်မှုကိုသိသိသာသာတိုးတက်စေသည်။