微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 这个代码示例中的$loop做了什么?

Phil Sturgeon写了关于基准测试的article.

我所关心的是这项名为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

我的问题是:

>这个$循环的目的是什么?
>它在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();

解决方法:

1 – 这个$循环的目的是什么?

好吧,$loop var用于将所有closures functions保存到一个数组中,以便稍后异步执行.

2 – 它在ReactPHP上说,它是一个简单的Web服务器.这是否意味着它取代了Nginx或Apache?

ReactPHP不会替换或与(Apache2 | Nginx)对抗,它会在大多数情况下将一些问题聚合到CLI进程.

3 – 何时是使用ReactPHP或任何类似技术的好时机?什么时候不是使用它的好时机?

我真的不在生产服务器上使用ReactPHP,但它已经非常成功地执行一些自动批处理或测试登台服务器中的一些问题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐