4

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

2 に答える 2

3

1 - この $loop の目的は何ですか?

$loop 変数は、すべてのクロージャー関数を配列に保持するために使用され、後で非同期的に実行されます。

2 - ReactPHP では、単純な Web サーバーであると書かれています。それは、nginx や Apache を置き換えるということですか?

ReactPHP は (Apache2 | Nginx) を置き換えたり、戦ったりしません。ほとんどの場合、いくつかの問題を CLI プロセスに集約します。

3 - ReactPHP または類似のテクノロジーを使用するのに適した時期はいつですか? それを使用するのに適していないのはいつですか?

私は実稼働サーバーで ReactPHP を実際に使用していませんが、自動化されたバッチ プロセスを実行したり、ステージング サーバーでいくつかの問題をテストしたりすることは非常に成功しています。

于 2013-12-21T18:16:28.210 に答える