webman和swow都是最新版,环境linux,使用下面代码查询数据库并返回结果后,退出webman就会报警告:
public function index(): Response
{
$value = \think\facade\Db::query('SELECT NOW() as now, sleep(5)'); //模拟慢查询
return json($value); // [{"now":"2025-02-06 23:41:03","0":"2025-02-06 23:41:03"}]
}
PHP Warning: Event loop close failed, reason: Resource busy or locked in Unknown on line 0
Warning: Event loop close failed, reason: Resource busy or locked in Unknown on line 0
[--I] signal 0x7f37ea21ec50
[-AI] async 0x7f37ea21ea90
[R--] tcp 0x7f37f3512d08
zend_mm_heap corrupted
worker[webman:23245] exit with status 6
如果不使用Db查询就不会有警告,请问我是否哪里理解有错呢?
你的查询一直没返回,退出webman时这个协程无法正常关闭,给个Warning不过分吧。
我是等待它返回后才关闭的,我甚至等了几分钟再关闭仍然有警告。。
本地测试正常
奇怪,我还在两台Linux服务器上测试都有这个警告,我以为是Swow的什么问题。。
这个报错网上还不好找,我再好好想想,先谢谢老大
刚又测试了下,发现使用 \think\facade\Db::query 就会出现警告,如果用PDO:
(new \PDO('mysql:host=127.0.0.1;dbname=xxx', 'xxx', 'xxx'))->query('SELECT NOW() as now, sleep(5)')->fetchAll();
就不会有警告,是不是ThinkORM内部有什么资源没释放。。
TP的orm一直不太敢用,tp的表单验证器 都有bug
真建议webman官方出品只适配Eloquent ORM。TP ORM为插件作为补充。
感觉swow也有问题,每次start都会有报错:
A bug occurred in swow-v1.5.3, please report it.
The swow developers probably don't know about it,
and unless you report it, chances are it won't be fixed.
You can report it by creating a bug report issue on following page:
不用TP的话,webman默认的应该没问题吧
测试了ubuntu debian 和wsl 都未出现你描述的错误。
think-orm项目都这么久了很多人在用基本上不会遇到什么bug。
swow在你的环境报bug不用就可以了。
协程也不是只有swow,webman同时支持swoole、swow和Fiber协程,非要用可以使用swoole或Fiber。
不是所有项目都需要协程,也不是所有开发者能驾驭协程,协程只是个可选项,只有在实在需要时去使用它,例如要curl大量外网接口时。其它情况使用非协程极限性能和稳定性是最好的。
感谢老大的详细回复,我用的是CentOS,swow是自己编译的最新版1.5.3,准备再试试swoole看看效果。另外我平时喜欢研究框架,总搞一些不常用的操作,所以容易发现一些bug,望老大不要见怪^^
新购两台新服务器+本地WSL测试,均未出现错误
Ubuntu

Debian

WSL

代码
