通常我们在使用 PHP 实现并发请求时,都会选择 curl_multi_init 来实现。但在 PHP7 中,我们还可以使用 Event 扩展中的 EventHttpRequest 来实现并发请求
<?php
$addresses = [
'www.baidu.com',
'www.sohu.com',
'www.tmall.com',
'www.jd.com',
];
$port = 80;
// 记录所有创建的 EventHttpConnection 对象
$connections = [];
// 记录每个 EventHttpConnection 对象所对应的 EventHttpRequest 对象
$requests = [];
function request_handle($request, $base)
{
if (is_null($request)) {
echo 'Time out' . PHP_EOL;
} else {
$response_code = $request->getResponseCode();
if ($response_code == 0) {
echo 'Connection refused' . PHP_EOL;
} elseif ($response_code != 200) {
echo 'Unexpected response:' . $response_code . PHP_EOL;
} else {
echo 'Success:' . $response_code . PHP_EOL;
$buf = $request->getInputBuffer();
echo 'Body:' . PHP_EOL;
while ($s = $buf->readLine(EventBuffer::EOL_ANY)) {
echo $s, PHP_EOL;
}
}
}
$request->free();
}
$base = new EventBase();
$dns = new EventDnsBase($base, true);
foreach ($addresses as $key => $address) {
$connections[$key] = new EventHttpConnection($base, $dns, $address, $port);
$requests[$key] = new EventHttpRequest('request_handle', $base);
$connections[$key]->makeRequest($requests[$key], EventHttpRequest::CMD_GET, '/');
}
$base->loop();