Php 在这个代码示例中,$loop做了什么?

Php 在这个代码示例中,$loop做了什么?,php,reactphp,Php,Reactphp,Phil Sturgeon写了这篇关于基准测试的文章 我关心的是一种叫做ReactPHP的技术 我去过他们的GitHub,但如果没有一个例子,我仍然无法完全理解它 谢天谢地,我可以用菲尔的回购协议 在第12行,Phil用PHP创建了一个循环 然后他开始在24号线使用环路 我的问题是: 此$loop的目的是什么 在PHP上,它是一个简单的web服务器。这是否意味着它将取代nginx或Apache 什么时候是使用PHP或任何类似技术的好时机?什么时候不是使用它的好时机 我正在努力学习这项技术

Phil Sturgeon写了这篇关于基准测试的文章

我关心的是一种叫做ReactPHP的技术

我去过他们的GitHub,但如果没有一个例子,我仍然无法完全理解它

谢天谢地,我可以用菲尔的回购协议

在第12行,Phil用PHP创建了一个循环

然后他开始在24号线使用环路

我的问题是:

  • $loop
    的目的是什么
  • 在PHP上,它是一个简单的web服务器。这是否意味着它将取代nginx或Apache
  • 什么时候是使用PHP或任何类似技术的好时机?什么时候不是使用它的好时机
我正在努力学习这项技术,所以如果我把这个问题写得不好,一定要让我知道,这样我就可以重写这个

编辑:

因为我得到的反馈是这个问题太广泛了,所以让我缩小我的问题范围,让它参考一个代码示例

我在下面复制了它。
$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();
$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=1;$page addTimer(0.001,函数($timer))使用($client,$page){
$buffer='';
$request=$client->request('GET','http://fantasy.premierleague.com/my-leagues/303/standings/?ls-页码='。$page);
$request->on('response',函数($response)使用(&$buffer){
$response->on('data',函数($data)使用(&$buffer){
$buffer.=$data;
});
});
$request->on('end',function()使用(&$buffer,$page){
\phpQuery::新文档($buffer);
foreach(pq('.ismStandingsTable tr')作为$data){
foreach(pq('td',$data)作为$key=>$val){
如果($key==2){
//打印pq($val)->text();
}
}
}
$time\U end=微时间(真);
$execution\u time=$time\u end-$GLOBALS['time\u start'];
echo(“\n”。$page.”,“$execution\u time”);
});
$request->end();
});
}
$loop->run();

1-这个$loop的目的是什么

好的,$loop变量用于将all保存到一个数组中,稍后异步执行

2-它在PHP上说,它是一个简单的web服务器。这是否意味着它取代了nginx或Apache

ReactPHP不会取代(Apache2 | Nginx)或与之抗争,在大多数情况下,它会将一些问题聚合到CLI进程中

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


我确实没有在生产服务器上使用ReactPHP,但它已经非常成功地执行了一些自动批处理过程或在暂存服务器中测试了一些问题。

循环完全按照它所说的做。它循环。就像node.js一样,它不断重复infinte循环,并等待附加任务的某些状态发生更改。这些更改发出可以在事件发生时完全处理的事件。 这使您有机会对外部事件(操作系统中的另一个进程、另一个Web服务或类似事件)做出反应。 这称为反应式编程

可能的用例是套接字服务器(不带ngjnx或Apache),它们等待客户端连接(例如webchat)或从您通过套接字连接到的证券交易所保存当前股票价格