事件回调函数
Swoole\Server
是事件驱动模式,所有的业务逻辑代码必须写在事件回调函数中。当特定的网络事件发生后,底层会主动回调指定的PHP
函数。
- 共支持
13
种事件,具体详情请参考各个页面详细页 - PHP语言有4种回调函数的写法
事件执行顺序
- 所有事件回调均在
$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, ]);