Swoole 5将移除自动添加Event::wait()特性详解

 更新时间:2019年07月10日 15:45:03   作者:韩天峰  
这篇文章主要给大家介绍了关于Swoole 5将移除自动添加Event::wait()特性的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Swoole5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

在之前的版本中,编写Cli命令行脚本中使用异步或协程功能时,Swoole会自动在脚本末尾检测是否有Event::wait()调用,如果没有,底层会自动调用register_shutdown_function在脚本结束时调用Event::wait(),进入事件循环。

这个特性为底层带来了非常多的麻烦,我们不得不做了大量编码工作,以解决带来的问题。即便如此,仍然存在大量潜在的风险,如某些PHP版本下内存泄露,某些特殊用法导致core dump等。在最新的Swoole 5版本中,我们准备抛弃这个历史包袱。不再自动添加 Event::wait() 到PHP的shutdown function列表。

Server、Process、Process\Pool相关程序请忽略此更新

错误实例

go(function () {
 Co::sleep(1);
 echo "done\n";
});

此代码中没有在脚本末尾添加Swoole\Event::wait(),底层会自动注册到shutdown function列表中。相当于:

register_shutdown_function(function () {
 Swoole\Event::wait();
});

go(function () {
 Co::sleep(1);
 echo "done\n";
});

在shutdown阶段处理程序逻辑会带来很多额外的维护性难题。

正确实例

在Swoole 4.4或Swoole 5版本中,建议:

  • 使用Coroutine\Scheduler作为程序的入口
  • 或者在程序末尾手工添加Event::wait()
$scheduler = new Coroutine\Scheduler;
$scheduler->add(function () {
 Co::sleep(1);
 echo "Done.\n";
});
$scheduler->start();

推荐使用

或者:

go(function () {
 Co::sleep(1);
 echo "done\n";
});
Swoole\Event::wait();

不推荐使用

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • php导出excel格式数据问题

    php导出excel格式数据问题

    本篇文章主要是对php导出excel格式数据的问题进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03
  • php删除数组中重复元素的方法

    php删除数组中重复元素的方法

    在很多情况下我们的数组会出现重复情况,那我们删除数组中一些重复的内容怎么办,本文讲述了php删除数组元素的方法,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • PHP几个实用自定义函数小结

    PHP几个实用自定义函数小结

    这篇文章主要介绍了PHP几个实用自定义函数,结合实例总结分析了PHP网络操作、字符串操作、时间操作及正则表达式使用等技巧,需要的朋友可以参考下
    2016-01-01
  • php 按指定元素值去除数组元素的实现方法

    php 按指定元素值去除数组元素的实现方法

    php 按指定元素值去除数组元素的实现方法,需要的朋友可以参考下。
    2011-11-11
  • PHP实现发送邮件的方法(基于简单邮件发送类)

    PHP实现发送邮件的方法(基于简单邮件发送类)

    这篇文章主要介绍了PHP实现发送邮件的方法,基于简单邮件发送类实现该功能.给出了简单邮件发送类,并说明了具体使用方法,需要的朋友可以参考下
    2015-12-12
  • php添加文章时生成静态HTML文章的实现代码

    php添加文章时生成静态HTML文章的实现代码

    PHP生成静态文章HTML,有批量的生成,但比较标准的应该是在添加文章时就生成HTML文章,编辑时再重新生成HTML文章,删除文章时同样也样删除多余出来的HTML文章,这时批量生成就显得有点力不从心了,下面就介绍一下PHP在添加文章时如何生成静态的HTML文件
    2013-02-02
  • PHP中获取变量的变量名的一段代码的bug分析

    PHP中获取变量的变量名的一段代码的bug分析

    百度一下关于php获取变量名的办法都是下面这个函数。但是用了发现有点bug
    2011-07-07
  • 如何在PHP程序中防止盗链

    如何在PHP程序中防止盗链

    php下用cookes实现防盗链的效果代码
    2008-04-04
  • 详解PHP八大设计模式

    详解PHP八大设计模式

    这篇文章主要介绍了PHP八大设计模式,对设计模式感兴趣的同学,不妨多试试,深刻了解其中的含义
    2021-04-04
  • 推荐十款免费 WordPress 插件

    推荐十款免费 WordPress 插件

    本文给大家介绍的是今年必备的10款WordPress插件,非常的实用,包含WordPress SEO By Yoast,Akismet,W3 Total Cache,Disqus Comment System,Google Sitemap Generator,Jetpack,Limit Login Attempts,Contact Form 7,Yet Another Related Posts Plugin等
    2015-03-03

最新评论