当前位置: 首页 > 后端技术 > PHP

Swoole5将去掉自动添加Event--wait()的特性

时间:2023-03-29 17:28:12 PHP

之前的版本,在写Cli命令行脚本,使用异步或者协程函数的时候,Sw??oole会自动检测末尾是否有Event::waitscript()调用,如果没有,底层会自动调用register_shutdown_function,在脚本最后调用Event::wait()进入事件循环。这个特性给底层带来了很大的麻烦,我们不得不做大量的编码工作来解决问题。尽管如此,仍然存在很多潜在的风险,比如某些PHP版本下的内存泄漏,以及一些特殊用法导致的核心转储。在最新的Swoole5版本中,我们准备丢掉这个历史包袱。不再自动将Event::wait()添加到PHP的关闭函数列表中。Server、Process、Process\Pool相关程序请忽略此更新错误instancego(function(){Co::sleep(1);echo"done\n";});这段代码没有在脚本末尾添加Swoole\Event::wait(),底层会自动注册到shutdown函数列表中。等价于:register_shutdown_function(function(){Swoole\Event::wait();});go(function(){Co::sleep(1);echo"done\n";});关闭阶段的处理程序逻辑会造成许多额外的维护难题。正确示例在Swoole4.4或Swoole5版本中。建议使用Coroutine\Scheduler作为程序的入口或者在程序末尾手动添加Event::wait()$scheduler=newCoroutine\Scheduler;$scheduler->add(function(){Co::sleep(1);echo"Done.\n";});$调度程序->开始();推荐或:go(function(){Co::sleep(1);echo"done\n";});Swoole\Event::wait();Deprecated