workerman如何全局捕获异常

augushong

问题描述

workerman应该如何捕获回调中的异常呢?除了在每个回调中使用try catch的写法,有没有全局的写法,而且还不能影响进程自动重启。

基本代码

        define('GLOBAL_START', 1);
        foreach (glob(app()->getBasePath() . '/worker/' . $this->commandName . '/start*.php') as $start_file) {
            require_once $start_file;
        }

        Worker::$pidFile = app()->getBasePath() . '/worker/' . $this->commandName  . '/workerman.pid';

        Worker::runAll();

面对这样的基本代码,应该如何写呢?

写在每个回调里

我知道可以在每个回调中写上try catch,但这样太麻烦了,也不太好统一封装管理。

$woker->onWorkerStart = function(){
    try{

    }catch{

    }
};
是不是可以写在Worker::runAll外面

因为加载的所有代码都是在runAll运行的,所以直接把runAll包裹起来就行了,是吗?

        try {
            Worker::runAll();
        } catch (\Throwable $th) {
            Log::error($th);
            throw $th;
        }

然后再把原有的异常抛出,就能实现原来的自动重启

介绍

根据我看到的代码,所有的回调方法都被捕捉(Exception和Error),除非抛出其他类型才能被更外层的异常捕获到。

难道只能在回调内部捕捉吗?

754 1 1
1个回答

walkor

必须在回调里try catch

  • 暂无评论
年代过于久远,无法发表回答
🔝