Phil Sturgeon 写了这篇关于基准测试的文章。
我关心的是这种称为 ReactPHP 的技术。
我去过他们的 GitHub,但如果没有一个例子,我仍然无法理解它。
谢天谢地,我可以使用 Phil 的仓库。
在第 12 行,Phil 使用 ReactPHP 创建了一个循环。
https://github.com/philsturgeon/nonblockingbro/blob/master/p2-async.php#L12
然后他在第 24 行开始使用循环
https://github.com/philsturgeon/nonblockingbro/blob/master/p2-async.php#L24
我的问题是:
- 这样做的目的是
$loop
什么? - 它在 ReactPHP 上说,它是一个简单的 Web 服务器。这是否意味着它取代了 nginx 或 Apache?
- 什么时候是使用 ReactPHP 或任何类似技术的好时机?什么时候不适合使用它?
我正在尝试了解这项技术,所以如果我对这个问题的措辞不好,请告诉我,以便我可以重写。
编辑:
由于我收到的反馈是这个问题太宽泛了,让我缩小我的问题范围,让它参考一个代码示例。
从https://github.com/philsturgeon/nonblockingbro/blob/master/p2-async.php#L12获取代码示例,
我在下面复制了它。做什么$loop
?
$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);
echo "Page number, Time taken";
for ($page = 1; $page <= $total_page; $page++) {
$loop->addTimer(0.001, function($timer) use ($client, $page) {
$buffer = '';
$request = $client->request('GET', 'http://fantasy.premierleague.com/my-leagues/303/standings/?ls-page='.$page);
$request->on('response', function($response) use (&$buffer) {
$response->on('data', function($data) use (&$buffer) {
$buffer .= $data;
});
});
$request->on('end', function() use (&$buffer, $page) {
\phpQuery::newDocument($buffer);
foreach (pq('.ismStandingsTable tr') as $data) {
foreach (pq('td', $data) as $key => $val) {
if ($key == 2) {
// print pq($val)->text();
}
}
}
$time_end = microtime(true);
$execution_time = $time_end - $GLOBALS['time_start'];
echo ("\n".$page.", ".$execution_time);
});
$request->end();
});
}
$loop->run();