详解PHP实现异步调用的4种方法
异步调用的概念
异步调用是指在发起请求后不等待响应,而是立即返回,在后续处理中获取响应的方式。相对于同步调用,它能够提高程序的并发能力和响应速度。
在PHP中,实现异步调用有多种方法,下面将详细介绍这四种方法。
方法一:使用cURL的异步选项
cURL(Client URL Library)是一个很常用的、强大的网络请求库。在PHP中,cURL也是默认提供的扩展库之一。cURL提供了一系列选项,让我们可以在请求时设置异步选项。
下面是一个示例代码:
function request($url, $callback) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, true); // 开启异步选项
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); // 设置超时时间
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback);
curl_setopt($ch, CURLOPT_FORBID_REUSE, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_exec($ch);
curl_close($ch);
}
function callback($ch, $content) {
echo 'result: ' . $content . PHP_EOL;
}
$url = 'https://www.example.com';
request($url, 'callback');
这个代码中,我们使用了curl_setopt函数设置了异步选项,并设置了超时时间。在请求启动后,程序不会等待响应,而是立即返回并输出result。请求的响应内容将在回调函数中输出。
方法二:使用pcntl_fork实现进程异步
在PHP中,可以使用pcntl_fork函数来创建子进程,达到异步调用的效果。子进程可以独立和父进程进行操作,这就使得程序的执行速度得到了提升。
下面是一个示例代码:
function async_request($url, $callback) {
$pid = pcntl_fork();
if ($pid === -1) {
die('fork failed');
} else if ($pid === 0) {
$content = file_get_contents($url);
call_user_func($callback, $content);
exit(0);
}
}
function callback($content) {
echo 'result: ' . $content . PHP_EOL;
}
$url = 'https://www.example.com';
async_request($url, 'callback');
这个代码中,我们使用pcntl_fork函数创建了一个子进程,子进程中请求了$url并将返回的内容传递给回调函数。在父进程中,程序不会等待子进程的完成,而是立即返回。
方法三:使用swoole扩展
Swoole是一个基于PHP的C++扩展库,提供了一些函数和类,使PHP具备类似Node.js、Go等语言的协程、异步IO等高性能特性。使用Swoole扩展可以实现高并发、低消耗的异步调用。
下面是一个示例代码:
$client = new swoole_http_client('www.example.com', 80);
$client->set([
'keep_alive' => false,
'timeout' => 10,
]);
$client->setHeaders([
'Host' => 'www.example.com',
"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",
"Accept-Encoding" => "gzip, deflate",
]);
$client->on('close', function(swoole_http_client $cli) {
echo "conn closed\n";
});
$client->get('/', function(swoole_http_client $cli) {
echo 'result: ' . $cli->body . PHP_EOL;
$cli->close();
});
这个代码中,我们使用了Swoole的swoole_http_client类来实现异步调用。在设置连接选项和请求头后,我们使用了get方法发起异步请求。在请求得到响应后,回调函数中输出响应内容。
方法四:使用ReactPHP
ReactPHP是一个标准的PHP库,用于实现高性能、非阻塞式、可扩展的异步应用。通过使用ReactPHP,我们可以很方便地实现异步HTTP请求、异步TCP/UDP请求等。
下面是一个示例代码:
$loop = React\EventLoop\Factory::create();
$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dnsResolver = $dnsResolverFactory->createCached('8.8.8.8', $loop);
$factory = new React\HttpClient\Factory();
$client = $factory->create($loop, $dnsResolver);
$request = $client->request('GET', 'http://www.example.com/');
$request->on('response', function (React\HttpClient\Response $response) {
$response->on('data', function ($data) {
echo 'result: ' . $data . PHP_EOL;
});
});
$request->end();
$loop->run();
这个代码中,我们首先使用了React\EventLoop来创建事件循环。然后,我们使用React\HttpClient的工厂类来创建一个异步HTTP请求对象。在异步请求中,我们使用回调函数输出响应内容。最后,我们启动事件循环。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
vavada: vavada - vavada
pin up az: pin up azerbaycan - pinup az
https://pinupaz.top/# pin up
пин ап вход: пин ап вход - пин ап вход
http://pinuprus.pro/# pin up вход
pin up casino pin up az pin-up casino giris
пин ап зеркало: пинап казино - пин ап зеркало
vavada: вавада - vavada
online pharmacy india top 10 pharmacies in india or india pharmacy mail order
http://nwspprs.com/?format=simple&action=shorturl&url=https://medicinefromindia.com Online medicine order
reputable indian pharmacies Online medicine home delivery and top online pharmacy india online shopping pharmacy india
Medicine From India: indian pharmacy online shopping - Medicine From India
canadian pharmacy online: Express Rx Canada - canadian pharmacy tampa
world pharmacy india п»їlegitimate online pharmacies india or indianpharmacy com
https://www.google.iq/url?q=https://medicinefromindia.com Online medicine home delivery
top 10 online pharmacy in india indianpharmacy com and buy prescription drugs from india cheapest online pharmacy india
http://medicinefromindia.com/# Medicine From India
mexico pharmacy order online mexican rx online mexican online pharmacy
medication from mexico pharmacy reputable mexican pharmacies online or pharmacies in mexico that ship to usa
http://club.dcrjs.com/link.php?url=https://rxexpressmexico.com:: mexican mail order pharmacies
п»їbest mexican online pharmacies medication from mexico pharmacy and medication from mexico pharmacy buying prescription drugs in mexico
mexican rx online: mexico pharmacies prescription drugs - mexican online pharmacy
canadian online drugs: Buy medicine from Canada - the canadian drugstore
https://medicinefromindia.com/# indian pharmacy online
indian pharmacy: Medicine From India - medicine courier from India to USA
canada drugs online reviews reputable canadian online pharmacy or onlinecanadianpharmacy
https://www.google.cv/url?q=https://expressrxcanada.com canadian pharmacy tampa
canadian world pharmacy canadian pharmacy world and canadian pharmacy victoza legitimate canadian online pharmacies
onlinecanadianpharmacy 24 Canadian pharmacy shipping to USA canadian world pharmacy
best india pharmacy indian pharmacy paypal or online pharmacy india
http://pinggu.zx110.org/review_url_medicinefromindia.com Online medicine order
buy prescription drugs from india indianpharmacy com and online shopping pharmacy india cheapest online pharmacy india
medicine courier from India to USA: medicine courier from India to USA - indian pharmacy
onlinecanadianpharmacy 24: canadian pharmacy online ship to usa - canadian pharmacy ratings
https://rxexpressmexico.shop/# Rx Express Mexico
canadian pharmacies that deliver to the us: Canadian pharmacy shipping to USA - canadian pharmacy store
reputable indian pharmacies indian pharmacy online or mail order pharmacy india
https://maps.google.co.mz/url?sa=t&url=https://medicinefromindia.com top 10 pharmacies in india
online pharmacy india india pharmacy and top 10 pharmacies in india top online pharmacy india
Medicine From India: indian pharmacy online - indian pharmacy online
indian pharmacy online shopping top 10 online pharmacy in india reputable indian pharmacies
medicine in mexico pharmacies buying prescription drugs in mexico online or mexico drug stores pharmacies
https://www.google.tg/url?q=https://rxexpressmexico.com medicine in mexico pharmacies
=cialis]buying from online mexican pharmacy buying prescription drugs in mexico and buying prescription drugs in mexico mexican border pharmacies shipping to usa
medicine courier from India to USA: world pharmacy india - medicine courier from India to USA
https://medicinefromindia.shop/# Medicine From India
Rx Express Mexico: mexican online pharmacy - medicine in mexico pharmacies
online shopping pharmacy india indian pharmacy or mail order pharmacy india
https://www.google.me/url?q=https://medicinefromindia.com online shopping pharmacy india
Online medicine order buy prescription drugs from india and india online pharmacy п»їlegitimate online pharmacies india
best india pharmacy: indian pharmacy online - indian pharmacy online
canadian pharmacies that deliver to the us canadian pharmacy online or canadian pharmacy
https://maps.google.ge/url?sa=t&url=https://expressrxcanada.com 77 canadian pharmacy
reliable canadian pharmacy cheap canadian pharmacy and canada pharmacy online vipps canadian pharmacy
indianpharmacy com medicine courier from India to USA MedicineFromIndia
Medicine From India: world pharmacy india - Medicine From India
Rx Express Mexico: mexican rx online - medicine in mexico pharmacies
https://expressrxcanada.com/# canada pharmacy reviews
canada rx pharmacy: ExpressRxCanada - rate canadian pharmacies
indian pharmacies safe top online pharmacy india or reputable indian online pharmacy
http://referless.com/?http://medicinefromindia.com/ п»їlegitimate online pharmacies india
india pharmacy mail order india pharmacy and mail order pharmacy india buy medicines online in india
indian pharmacy online shopping: indian pharmacy online - indian pharmacy online shopping
https://expressrxcanada.shop/# canada drugs
RxExpressMexico mexico drug stores pharmacies mexican online pharmacy
Medicine From India: indian pharmacy online - Medicine From India
mexican drugstore online mexican pharmaceuticals online or medicine in mexico pharmacies
https://www.google.ac/url?sa=t&url=https://rxexpressmexico.com п»їbest mexican online pharmacies
buying prescription drugs in mexico online mexican online pharmacies prescription drugs and mexico pharmacies prescription drugs purple pharmacy mexico price list
Medicine From India: online shopping pharmacy india - indian pharmacy online
mexico drug stores pharmacies: mexico drug stores pharmacies - mexico drug stores pharmacies
https://expressrxcanada.shop/# canada drug pharmacy
RxExpressMexico: RxExpressMexico - mexican rx online
mexico drug stores pharmacies: Rx Express Mexico - mexico pharmacy order online
mexican border pharmacies shipping to usa: mexico pharmacies prescription drugs - mexico pharmacies prescription drugs
https://rxexpressmexico.shop/# Rx Express Mexico
Rx Express Mexico: Rx Express Mexico - RxExpressMexico
mexican rx online Rx Express Mexico Rx Express Mexico
my canadian pharmacy reviews: Buy medicine from Canada - vipps canadian pharmacy
RxExpressMexico: mexico pharmacies prescription drugs - Rx Express Mexico
https://rxexpressmexico.shop/# mexican rx online
best canadian pharmacy to order from: Canadian pharmacy shipping to USA - canadian pharmacy prices
vente de mГ©dicament en ligne: Medicaments en ligne livres en 24h - pharmacie en ligne sans ordonnance pharmafst.com
https://pharmafst.shop/# trouver un mГ©dicament en pharmacie
pharmacie en ligne france livraison belgique Pharmacie Internationale en ligne or pharmacie en ligne france livraison belgique
https://clients1.google.com.na/url?sa=t&url=http://pharmafst.com pharmacie en ligne france livraison belgique
Pharmacie sans ordonnance pharmacie en ligne france pas cher and pharmacie en ligne trouver un mГ©dicament en pharmacie
kamagra gel: Kamagra Commander maintenant - Kamagra pharmacie en ligne
kamagra oral jelly: kamagra oral jelly - kamagra en ligne
acheter mГ©dicament en ligne sans ordonnance: Medicaments en ligne livres en 24h - acheter mГ©dicament en ligne sans ordonnance pharmafst.com
pharmacie en ligne pas cher pharmacie en ligne avec ordonnance or pharmacie en ligne sans ordonnance
http://logen.ru/bitrix/redirect.php?goto=https://pharmafst.com vente de mГ©dicament en ligne
pharmacie en ligne pas cher п»їpharmacie en ligne france and pharmacie en ligne france livraison internationale pharmacie en ligne france livraison internationale
Cialis en ligne Achat Cialis en ligne fiable or Acheter Cialis 20 mg pas cher
http://renewable.jp/index.php?a=free_page/goto_mobile&referer=https://tadalmed.com Acheter Cialis
Cialis sans ordonnance 24h Cialis sans ordonnance 24h and Acheter Cialis Tadalafil 20 mg prix en pharmacie
kamagra gel: kamagra 100mg prix - kamagra 100mg prix
pharmacie en ligne avec ordonnance: Medicaments en ligne livres en 24h - pharmacie en ligne france pas cher pharmafst.com
kamagra en ligne Kamagra Commander maintenant or kamagra en ligne
https://cse.google.tm/url?sa=i&url=http://kamagraprix.shop kamagra pas cher
Acheter Kamagra site fiable Kamagra Oral Jelly pas cher and achat kamagra Achetez vos kamagra medicaments
pharmacie en ligne livraison europe Meilleure pharmacie en ligne pharmacie en ligne france fiable pharmafst.shop
https://tadalmed.shop/# Cialis generique prix
Achat mГ©dicament en ligne fiable: Pharmacies en ligne certifiees - pharmacie en ligne france livraison internationale pharmafst.com
Kamagra Commander maintenant: achat kamagra - Achetez vos kamagra medicaments
pharmacie en ligne france pas cher: Pharmacies en ligne certifiees - pharmacie en ligne livraison europe pharmafst.com
pharmacie en ligne sans ordonnance pharmacie en ligne pharmacie en ligne pas cher pharmafst.shop
Pharmacie sans ordonnance: Meilleure pharmacie en ligne - vente de mГ©dicament en ligne pharmafst.com
Achetez vos kamagra medicaments kamagra en ligne or Kamagra pharmacie en ligne
https://maps.google.mu/url?sa=t&url=https://kamagraprix.com achat kamagra
kamagra pas cher acheter kamagra site fiable and acheter kamagra site fiable Kamagra Commander maintenant
Acheter Viagra Cialis sans ordonnance: Cialis en ligne - Tadalafil 20 mg prix en pharmacie tadalmed.shop
cialis generique Cialis generique prix or Pharmacie en ligne Cialis sans ordonnance
http://renaware.net/renaware-consultant/recipes/?linkname=utensiliosdecocina&langid=sp&origdomain=tadalmed.com Tadalafil achat en ligne
Cialis generique prix Tadalafil 20 mg prix sans ordonnance and Achat Cialis en ligne fiable Tadalafil 20 mg prix en pharmacie
https://kamagraprix.com/# kamagra en ligne
Acheter Cialis: Tadalafil achat en ligne - Tadalafil sans ordonnance en ligne tadalmed.shop
https://kamagraprix.shop/# acheter kamagra site fiable
Achetez vos kamagra medicaments