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();