Skip to content

PHP Fatal error: Uncaught ErrorException: Swoole\Server::start(): Swoole\WebSocket\Server->onClose handler error #492

Open
@SangBoy

Description

@SangBoy
  1. Your software version (Screenshot of your startup)

    Software Version
    PHP 8.0.26
    Swoole 5.1.0
    LaravelS 3.7.35
    Laravel Framework [production] 9.33.0
  2. Detail description about this issue(error/log)

Error1:

PHP Fatal error:  Uncaught ErrorException: Swoole\Server::start(): Swoole\WebSocket\Server->onClose handler error in /www/wwwroot/app.com/vendor/hhxsv5/laravel-s/src/Swoole/Server.php:413
Stack trace:
#0 /www/wwwroot/app.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(259): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}()
#2 /www/wwwroot/app.com/vendor/hhxsv5/laravel-s/src/Swoole/Server.php(413): Swoole\Server->start()
#3 /www/wwwroot/app.com/vendor/hhxsv5/laravel-s/src/Console/Portal.php(158): Hhxsv5\LaravelS\Swoole\Server->run()
#4 /www/wwwroot/app.com/vendor/hhxsv5/laravel-s/src/Console/Portal.php(59): Hhxsv5\LaravelS\Console\Portal->start()
#5 /www/wwwroot/app.com/vendor/symfony/console/Command/Command.php(291): Hhxsv5\LaravelS\Console\Portal->execute()
#6 /www/wwwroot/app.com/bin/laravels(167): Symfony\Component\Console\Command\Command->run()
#7 {main}
  thrown in /www/wwwroot/app.com/vendor/hhxsv5/laravel-s/src/Swoole/Server.php on line 413

Error2:

PHP Fatal error:  Uncaught ErrorException: Swoole\Server::start(): Swoole\Http\Server->onRequest handler error in /www/wwwroot/app.mori-building.com/vendor/hhxsv5/laravel-s/src/Swoole/Server.php:413
Stack trace:
#0 /www/wwwroot/app.mori-building.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(259): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}()
#2 /www/wwwroot/app.mori-building.com/vendor/hhxsv5/laravel-s/src/Swoole/Server.php(413): Swoole\Server->start()
#3 /www/wwwroot/app.mori-building.com/vendor/hhxsv5/laravel-s/src/Console/Portal.php(158): Hhxsv5\LaravelS\Swoole\Server->run()
#4 /www/wwwroot/app.mori-building.com/vendor/hhxsv5/laravel-s/src/Console/Portal.php(59): Hhxsv5\LaravelS\Console\Portal->start()
#5 /www/wwwroot/app.mori-building.com/vendor/symfony/console/Command/Command.php(291): Hhxsv5\LaravelS\Console\Portal->execute()
#6 /www/wwwroot/app.mori-building.com/bin/laravels(167): Symfony\Component\Console\Command\Command->run()
#7 {main}
  thrown in /www/wwwroot/app.mori-building.com/vendor/hhxsv5/laravel-s/src/Swoole/Server.php on line 413
  1. Some reproducible code blocks and steps

在使用supervisord守护运行swoole的时候,错误日志中出现了以上两个错误,经过排查后,也没找出来什么问题,
WorkerStopEvent和WorkerErrorEvent中也只加了事务回滚,如下:

WorkerErrorEvent:

    public function handle(Server $server, $workerId, $workerPId, $exitCode, $signal)
    {
        try {
            // 回滚事务
            DB::rollBack();
        } catch (Throwable $e) {
            echo sprintf('[%s] [%s] %s', date('Y-m-d H:i:s'), 'error', 'WorkerErrorEvent:工作进程报错,workerId:' . $workerId . ',事务回滚失败:' . $e->getMessage() . ',workerPId:' . $workerPId);
        }
        echo sprintf('[%s] [%s] %s', date('Y-m-d H:i:s'), 'error', 'WorkerErrorEvent:工作进程出错,workerId:' . $workerId . ',workerPId:' . $workerPId . ',退出码:' . $exitCode . ',信号:' . $signal);
    }

WorkerStopEvent:

    public function handle(Server $server, $workerId)
    {
        logger()->driver('swoole')->info('WorkerStopEvent:工作进程停止,workerId:' . $workerId);
        echo sprintf('[%s] [%s] %s', date('Y-m-d H:i:s'), 'info', 'WorkerStopEvent:工作进程停止,workerId:' . $workerId);
        try {
            // 统一事务回滚,防止有未提交的事务
            DB::rollBack();
            logger()->driver('swoole')->info('WorkerStopEvent:事务回滚,workerId:' . $workerId);
        } catch (Throwable $e) {
            logger()->driver('swoole')->error('WorkerStopEvent:事务回滚失败:' . $e->getMessage() . ',workerId:' . $workerId);
            echo sprintf('[%s] [%s] %s', date('Y-m-d H:i:s'), 'error', 'WorkerErrorEvent:工作进程停止,workerId:' . $workerId . ',事务回滚失败:' . $e->getMessage());
        }
        echo sprintf('[%s] [%s] %s', date('Y-m-d H:i:s'), 'info', 'WorkerStopEvent:事务回滚,workerId:' . $workerId);
    }

希望有大佬能指点迷津🙏

Metadata

Metadata

Assignees

Labels

analyzingAnalyzing this issue

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions