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),除非抛出其他类型才能被更外层的异常捕获到。
难道只能在回调内部捕捉吗?
必须在回调里try catch