swoole的Server环境下异常或错误 仅支持手动 try /catch 方式,不支持 set_error_handle & set_exception_handle 全局捕获异常。
swoole的进程Process | 进程池ProcessPool 模型下能使用 set_error_handle & set_exception_handle 捕获异常
try/catch 不仅支持应用层的错误异常,同时对 底层的一些错误也是可以被捕获的,如function、class、method不存在。
如何全局捕获 swoole应用中的错误异常提交[通知]给开发者
1. 在swoole 的每个业务回掉事件中 所有的业务代码都写在 try/catch中。
try{
// todo
... 你的业务代码
}catch(\Throwable $e){
$className=get_class($e); // 得到异常类名,根据该类名,可以确定是你的业务是手工抛出异常还是底层错误。
// todo
... 做相应的处理,并将详细错误报错提交开发者
}
- 由于swoole的 onWorkerError回掉事件不能获取业务的详细错误,故需要 单独获取你的错误[获取请求中最后一个异常]异常并回收处理。
在 onWorkerStart 事件中设置
register_shutdown_function(function(){
if($error=error_get_last()){ // 存在错误的时候返回数组
// todo ... 得到进程中获取到的最后一个错误信息,在此可将错误信息报告给开发者
} //
});
网友评论