CentOs 6,Php7.1,libevent,nginx返回502

时间:2017-11-24 10:49:06

标签: php asynchronous libevent php-7.1 reactphp

我正在将laravel web应用程序从php5.6升级到php7.1,这导致我升级libevent模块。应用程序是基于反应库的异步ans。

所以我最后安装了:PHP 7.1.12,libevent:2.1.8 + expressif / pecl-event-libevent。我有稳定的" 502 Bad Gateway"来自nginx。没有libevent(ReactStreamLoop)或PHP 5.6 + libevent:1.4工作正常。 请求登陆index.php,稍后会在启动应用程序内部发生。

nginx日志:

  

2017/11/24 10:41:24 [错误] 24985#0:* 7 recv()失败(104:对等连接重置)从上游读取响应头,客户端:14.183.16.180,服务器:173.199 .117.122,请求:" GET / HTTP / 1.1",上游:" fastcgi://127.0.0.1:9000",主持人:" 173.199.117.122&#34 ;

     

2017/11/24 10:41:25 [错误] 24985#0:* 7 recv()失败(104:对等连接重置)从上游读取响应头,客户端:14.183.16.180,服务器:173.199 .117.122,请求:" GET / HTTP / 1.1",上游:" fastcgi://127.0.0.1:9000",主持人:" 173.199.117.122&#34 ;

php-fpm log:

  

[2017年11月24日10:41:24]警告:[pool www] child 22300在开始39.486978秒之后退出信号11(SIGSEGV)

     

[24-Nov-2017 10:41:24]注意:[pool www] child 22331开始

     

[24-Nov-2017 10:41:25]警告:[pool www] child 22301在开始后的40.205103秒之后退出信号11(SIGSEGV)

     

[24-Nov-2017 10:41:25]注意:[pool www] child 22332开始

UPDATE:如果强制使用ReactStreamLoop,则有效。

更新:在类似的配置上本地重现。找到了这样的示例,它与LibEventLoop崩溃,但与StreamSelectLoop一起使用。

require_once __DIR__.'/../vendor/autoload.php';

$loop = new \React\EventLoop\LibEventLoop();
//$loop = new \React\EventLoop\StreamSelectLoop();

$config = array(
    'host'      => '127.0.0.1',
    'port'      => '3306',
    'dbname'    => 'mysql',
    'user'      => 'root',
    'passwd'    => 'root',
    'charset'   => 'utf8',
);

$client = new \React\MySQL\Connection($loop, $config);

$client->connect(function() {});

$client->query('select 8 as cnt', function () {
    echo "inside\n";
});

echo "start\n";
$loop->run();

输出:

#php ./tests/test.php 
start
Segmentation fault (core dumped)

1 个答案:

答案 0 :(得分:0)

您使用的扩展程序与PHP 7及更高版本不兼容。您必须使用其他事件循环实现之一,例如基于stream_select()或其中一个支持的扩展。

有关详细信息,请参阅https://github.com/reactphp/event-loop/pull/62