PHP怎么实现异步操作

介绍

这篇文章主要讲解了“PHP怎么实现异步操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP怎么实现异步操作”吧!

<强> 1。为啥PHP需要异步操作?

一般来说PHP适用的场合是web页面展示等耗时比较短的任务,如果对于比较花时间的操作如调整图片,大数据导入,批量发送EDM,短信等,就很容易出现操作超时情况。你可以说我可以设置无限超时时间,等等你也要知道PHP有一个工作模式是fastcgi, PHP无限不超时,不代表fastcgi相应不超时……如果你还想说要fastcgi相应永不超时,我建议你应该跟你们的运维人员讨论去……你会得到的回复将是去你妈的! ! ! ! !

这个时候异步的操作就发挥他的作用了,由于是非阻塞操作,操作会即时返回,然后在后台再慢慢干的活。管你超时不超时的,我就没有在当前的进程/线程下干的活。看吧是不是很美好,不过其实这也是个坑……

<强> 2。PHP可以实现异步操作吗?

答案是肯定的,不过网上各种的纯PHP实现得就有点别扭了.socket模式,挂起进程模式,有的还直接叉进程。很好,各路神仙各显神通。如果运维人员看到的话,一定会你们的,不把web服务器跑死才怪……

那还有其他更好的方法去实现这个异步操作的可能么?有,现在我们只有想怎么开外挂了。查一下PECL主流的外挂方案有一堆的rabbitMQ(消息队列),其中有个用于任务分配的外挂进入了我们的视线Gearman(其实这家伙才是角,我就不详细介绍了,Gearman http://www.ttlsa.com/?s=gearman& searchsubmit=搜索)。

<强> 3。为啥选择Gearman吗?

别的不说,就说他的客户多,支持很多语言的客户,你可以使用大部分你喜欢的语言去写工人。我个人是很烦语言之争,你喜欢用神码语言写工人都随你喜欢。有数据持久化支持(就是把队列保存到数据库介质中,那故障恢复也好做),有群集支持(其实很多rabbitMQ都有这些功能)。PECL上有扩展,也有纯PHP实现扩展。反正这个Gearman也活了很久了,杂七杂八的问题都基本上解决了。
有了Gearman这外挂就简单多了。就是向Gearman发送一个任务,把执行的任务发出去,然后等待工人去调用PHP cli去运行我们的PHP代码。

PHP怎么实现异步操作