0

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

所以我以安装结束:PHP 7.1.12,libevent:2.1.8 + expressif/pecl-event-libevent。我有来自 nginx 的稳定的“502 Bad Gateway”。没有 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”

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”

php-fpm 日志:

[24-Nov-2017 10:41:24] 警告:[pool www] 子 22300 在信号 11 (SIGSEGV) 上退出 39.486978 秒后开始

[2017 年 11 月 24 日 10:41:24] 通知:[池 www] 孩子 22331 开始

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

[24-Nov-2017 10:41:25] 通知:[pool www] 孩子 22332 开始

更新:如果强制使用 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)
4

1 回答 1

0

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

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

于 2017-11-27T19:00:19.300 回答