🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 事件回调函数 [TOC] `Swoole\Server`是事件驱动模式,所有的业务逻辑代码必须写在事件回调函数中。当特定的网络事件发生后,底层会主动回调指定的`PHP`函数。 * 共支持`13`种事件,具体详情请参考各个页面详细页 * PHP语言有[4种回调函数的写法](4种PHP回调函数风格.md) ## 事件执行顺序 * 所有事件回调均在`$server->start`后发生 * 服务器关闭程序终止时最后一次事件是`onShutdown` * 服务器启动成功后,`onStart`/`onManagerStart`/`onWorkerStart`会在不同的进程内并发执行 * `onReceive`/`onConnect`/`onClose`在`Worker`进程中触发 * `Worker`/`Task`进程启动/结束时会分别调用一次`onWorkerStart`/`onWorkerStop` * `onTask`事件仅在`task`进程中发生 * `onFinish`事件仅在`worker`进程中发生 > `onStart/onManagerStart/onWorkerStart`3个事件的执行顺序是不确定的 ## 异常捕获 * `swoole`不支持`set_exception_handler`函数 * 如果你的PHP代码有抛出异常逻辑,**必须在事件回调函数顶层进行try/catch来捕获异常** ~~~ $serv->on('Receive', function() { try { //some code } catch(Exception $e) { //exception code } } ~~~ ## 协程模式 `Swoole2/4`版本支持了协程,使用协程后事件回调函数将会并发地执行。协程是一种用户态线程实现,没有额外的调度消耗,仅占用内存。使用协程模式,可以理解为“**每次事件回调函数都会创建一个新的线程去执行,事件回调函数执行完成后,线程退出**”。 如果希望关闭协程,可设置: ~~~ $server->set(["enable_coroutine" => false, ]); ~~~