2 Star 2 Fork 2

水平凡 / think-swoole

 / 详情

是否有碰到过异步下Db无法回补的问题?

Done
Opened this issue  
2020-05-13 22:54

1.设置pool['db']['enable']=>true,max_active=3,max_wait_time=>5默认配置.
在控制器下使用异步go(function(){Event::trigger('doEvent')})触发事件(事件内有Db操作).访问3次后Borrow the connection timeout in 5.00(s), connections in pool: 0, all connections: 3.系统提示连接池被耗尽.异步里的Db连接没被释放.感觉是个bug…
2.设置监听
'swoole.task'=>[\app\listener\SwooleTask::class]
'swoole.finish'=>[\app\listener\SwooleTaskFinish::class]
在控制器下执行$server->task(['a'=>'b']);//(Swoole\Server $server)
在控制台下可以看到SwooleTask的输出,看不到SwooleTaskFinish的输出.好像也是个bug…
码主是否有意修复下

Comments (10)

糖水不加糖 created任务
糖水不加糖 set related repository to 水平凡/think-swoole
Expand operation logs

有具体的代码吗?我也测试测试~~
我们自己也有在控制器用协程,没发现问题。

有具体的代码吗?我也测试测试~~
我们自己也有在控制器用协程,没发现问题。

@水平凡
1.在event.php中定义一个监听'Test' => ['\app\listener\Test'],
2.\app\listener\Test中做一个DB操作.Db::table('XXX')....->find/select/delete/update()
3.控制器中同步操作执行任意次数Event::trigger('Test')无问题.执行max_active次数go(function(){Event::trigger('Test')})后就会报错Borrow the connection timeout in 5.00(s), connections in pool: 0, all connections: 3

你试试这样操作
你可以试试这样操作还会不会无法回收连接

输入图片说明
输入图片说明
输入图片说明

我在浏览器访问是正常打开,控制台也会打印查询出来的数据

输入图片说明
输入图片说明
输入图片说明
我在浏览器访问是正常打开,控制台也会打印查询出来的数据

@水平凡
看到你的回复然后我大概就猜到了一点原因.
think-swoole版本是3.0.6以下会触发.github上我也提了issue可能被修复了? :fearful:

投入task
监听task
task-finish监听
console输出
task的finish监听问题有碰到过吗 :grey_question:

你这个问题,用法调整下就可以了~~
SwooleTask类,handle方法接收一个Swoole\Server\Task $task对象。任务处理完后,可以手动调用 $task->finish(); 为什么不能直接用返回值的问题,可能是think-swoole扩展嵌套了好多次闭包,估计不能正常方法。
然后在 SwooleTaskFinish 类怎么接收,这里需要注意一下,扩展是用“$this->triggerEvent($event, func_get_args());” 这样触发的,所以 SwooleTaskFinish 的 handle 方法,直接接收一个参数 $params,你要的任务数据再 $params[2] 里,顺序是 0=> $server,1=>$task_id,2=>$data

输入图片说明
输入图片说明
输入图片说明

@水平凡
感谢大佬回复.被自己绕进去了.在swoole的官方文档上有一句:在onTask回调函数中return字符串,等同于调用finish.因为改写过webscoket的scoketio监听(都是这个原理),就钻牛角的认为return了就会触发finish.并且think\swoole\Manager下的$events也是包含finish的,就感觉是监听写错了...再次感谢

水平凡 changed issue state from 待办的 to 已完成

Sign in to comment

Status
Assignees
Milestones
Pull Requests
Successfully merging a pull request will close this issue.
Branches
Planed to start   -   Planed to end
-
Top level
Priority
参与者(2)
6910 shuipfs 1584343198
PHP
1
https://gitee.com/shuipf/think-swoole.git
git@gitee.com:shuipf/think-swoole.git
shuipf
think-swoole
think-swoole

Search