easy-swoole / easyswoole

swoole,easyswoole,swoole framework
https://www.easyswoole.com/
Apache License 2.0
4.74k stars 510 forks source link

ES USES the PDO to cause service exceptions #123

Closed kajweb closed 6 years ago

kajweb commented 6 years ago

swoole for win版本:https://www.swoole.com/static/swoole-4.2.1.zip es版本:1.1.1

问题:在直接运行php和使用swoole运行pdo均正常。但是在es中使用出现了502错误(无法访问此网站)。同样的es代码在linux可以正常运行,但在win版本无法运行。

<?php
//php-cli Version(正常)
$dbhost = '127.0.0.1:3306';  // mysql服务器主机地址
$dbuser = 'admin';            // mysql用户名
$dbpass = 'admin';          // mysql用户名密码
$conn = new PDO('mysql:host=127.0.0.1;dbname=yiban;port=3306', $dbuser, $dbpass );
$query = $conn->query('select * from yiban_college_data');
$data =[];
print_r( $query->fetchAll() );
<?php
//php-swoole Version(正常)
$http = new swoole_http_server("127.0.0.1", 9501);
$http->on('request', function ($request, $response) {
    $dbhost = '127.0.0.1:3306';  // mysql服务器主机地址
    $dbuser = 'admin';            // mysql用户名
    $dbpass = 'admin';          // mysql用户名密码
    $conn = new PDO('mysql:host=127.0.0.1;dbname=yiban;port=3306', $dbuser, $dbpass );
    $query = $conn->query('select * from yiban_college_data');
    $data =[];
    print_r( $query->fetchAll() );
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();
<?php
//ES Version(win异常,linux正常)
    function test(){
        $dbhost = '127.0.0.1:3306';  // mysql服务器主机地址
        $dbuser = 'admin';            // mysql用户名
        $dbpass = 'admin';          // mysql用户名密码
        $conn = new \PDO('mysql:host=127.0.0.1;dbname=yiban;port=3306', $dbuser, $dbpass );
        $query = $conn->query('select * from yiban_college_data');
        $data =[];
        print_r( $query->fetchAll() );
    }
kajweb commented 6 years ago

在ES中,执行以下语句均返回1(true)

 echo class_exists("PDO");
 echo class_exists("\PDO");
kajweb commented 6 years ago

github地址:https://github.com/kajweb/easyswoole-exceptions

twose commented 6 years ago

win版本仅供开发测试, 不保证可用, 而且你并没有提供win下出现错误时产生的相关错误日志

kajweb commented 6 years ago

没有出现任何错误信息。cli窗口没有异常提醒,浏览器由nginx提示出来502。 无法连接mysql,所以导致开发测试无法进行。 由于暂时没有其他环境进行测试,所以过来问下大家能否能使用。已经提供git地址

kajweb commented 6 years ago

日志到时候我回去找一下。忘记还有log这个东西了。

kajweb commented 6 years ago

刚刚测试了,没有错误日志产生。

能找到的都是一些没有用的信息。

Connection: keep-alive
Content-Length: 559
Content-Type: text/html; charset=utf-8
Date: Tue, 09 Oct 2018 10:03:25 GMT
Server: nginx/1.15.5
502 Bad Gateway

502 Bad Gateway


nginx/1.15.5
kajweb commented 6 years ago

貌似找到原因了,因为es中使用了类似$http->set( $config );的方法,导致swoole报错(可能是es隐藏得好,没有报错。) 报错内容:

F:\Code\runtime\swoole-for-win-exceptions\normal>swoole index.php
[2018-10-09 22:40:19 @4436.0]   WARNING swServer_start_check: onTask is null
PHP Fatal error:  Swoole\Http\Server::start(): failed to start server. Error: sw
Server_start_check: onTask is null in /cygdrive/f/Code/runtime/swoole-for-win-ex
ceptions/normal/index.php on line 17

复现代码:https://github.com/kajweb/swoole-for-win-exceptions

twose commented 6 years ago

设置了task_worker_num就必须设置onTask回调, 请阅读相关文档

kajweb commented 6 years ago

抱歉,可能是我没有表达清楚。我这里的意思的: 如果win环境下设置了类似的配置,会导致PDO运行不正常且没有报错,相当于一个优化建议。 这段代码linux中运行正常,但是在win会出问题。 如果您方便的话,可以尝试使用win下载swoole for win来测试一下是否存在这个问题。

因为您说:win版本仅供开发测试, 不保证可用。 这里发现可能异常的地方,所以提出来看看下个版本时候能改进一下。