webman和swow都是最新版,環(huán)境linux,使用下面代碼查詢數(shù)據(jù)庫(kù)并返回結(jié)果后,退出webman就會(huì)報(bào)警告:
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查詢就不會(huì)有警告,請(qǐng)問(wèn)我是否哪里理解有錯(cuò)呢?
你的查詢一直沒(méi)返回,退出webman時(shí)這個(gè)協(xié)程無(wú)法正常關(guān)閉,給個(gè)Warning不過(guò)分吧。
奇怪,我還在兩臺(tái)Linux服務(wù)器上測(cè)試都有這個(gè)警告,我以為是Swow的什么問(wèn)題。。
這個(gè)報(bào)錯(cuò)網(wǎng)上還不好找,我再好好想想,先謝謝老大
剛又測(cè)試了下,發(fā)現(xiàn)使用 \think\facade\Db::query 就會(huì)出現(xiàn)警告,如果用PDO:
(new \PDO('mysql:host=127.0.0.1;dbname=xxx', 'xxx', 'xxx'))->query('SELECT NOW() as now, sleep(5)')->fetchAll();
就不會(huì)有警告,是不是ThinkORM內(nèi)部有什么資源沒(méi)釋放。。
感覺swow也有問(wèn)題,每次start都會(huì)有報(bào)錯(cuò):
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:
測(cè)試了ubuntu debian 和wsl 都未出現(xiàn)你描述的錯(cuò)誤。
think-orm項(xiàng)目都這么久了很多人在用基本上不會(huì)遇到什么bug。
swow在你的環(huán)境報(bào)bug不用就可以了。
協(xié)程也不是只有swow,webman同時(shí)支持swoole、swow和Fiber協(xié)程,非要用可以使用swoole或Fiber。
不是所有項(xiàng)目都需要協(xié)程,也不是所有開發(fā)者能駕馭協(xié)程,協(xié)程只是個(gè)可選項(xiàng),只有在實(shí)在需要時(shí)去使用它,例如要curl大量外網(wǎng)接口時(shí)。其它情況使用非協(xié)程極限性能和穩(wěn)定性是最好的。
感謝老大的詳細(xì)回復(fù),我用的是CentOS,swow是自己編譯的最新版1.5.3,準(zhǔn)備再試試swoole看看效果。另外我平時(shí)喜歡研究框架,總搞一些不常用的操作,所以容易發(fā)現(xiàn)一些bug,望老大不要見怪^^