最近在使用EasySwoole处理异步任务(Task)时遇到了一个问题。
有一个Task,原本是在EasySwooleEvent.php
中注册Crontab并异步调用这个Task运行的,好像没啥问题。但当把这个Task改为在Http控制器中执行时,问题出现了。
这个Task的运行时长通常在2分钟左右,在Crontab中能正常运行,而通过Http控制器去请求同步执行时,基本上都是在8秒左右就结束了,并且返回一个-7
的错误代码,EasySwoole官网文档中说这个错误是因为超时。
试着在dev.php
中修改MAIN_SERVER
下的SETTING
和TASK
的配置,各个配置都改了一遍,包括num和time的所有配置,还是不行。看来这应该是个BUG了。
EasySwoole前两年用的是3.3版本,这次用的3.5版,而最新版是3.7。Github和Gitee上的仓库看起来是是一样的,最近一次提交是8个月前,官网上的文档有不少页面中的代码示例还是老版本中的写法,看来是久不维护了。
Swoole本身搞协程那一套就有很多BUG,特别是Swoole3及之前的版本,新版本好一些,但还是有不少坑,EasySwoole基于Swoole,也不可避免地有天然的缺陷。所以,搞清楚自己的需求很重要,首先问问自己真的要上Swoole吗?其次,如果真的要上,哪些地方可以用Swoole,哪些地方不能用一定要搞清楚。最后,协程是Golang先搞出来的,要不要转到Go呢?毕竟老做PHP也没啥意思啊!