webman v2.1 已經(jīng)提供了以下組件,它們都集成了連接池,支持在協(xié)程和非協(xié)程環(huán)境下使用
升級后不會自動使用協(xié)程,需要設(shè)置eventLoop才會開啟協(xié)程,直接升級對業(yè)務(wù)沒有影響。
如果有使用數(shù)據(jù)庫 redis等組件,需要同步升級,參見升級到v2.1
協(xié)程并非銀彈,它有自己的局限性,引入?yún)f(xié)程會帶來全局變量污染問題、資源競爭問題、調(diào)試?yán)щy問題。
從壓測數(shù)據(jù)來看,在充分利用CPU的情況下,引入?yún)f(xié)程極限性能一般會下降10-20%。
但是在有慢IO業(yè)務(wù)中,引入?yún)f(xié)程確實會大幅度提升性能。
牛啊
Workerman[start.php] start in DEBUG mode
-------------------------------------------- WORKERMAN ---------------------------------------------
Workerman/5.1.0 PHP/8.2.10 (Jit off) Linux/5.15.167.4-microsoft-standard-WSL2
--------------------------------------------- WORKERS ----------------------------------------------
event-loop proto user worker listen count state
event tcp root webman http://0.0.0.0:8201 24 [OK]
event tcp root monitor none 1 [OK]
----------------------------------------------------------------------------------------------------
大佬,什么叫有慢io的業(yè)務(wù)?操作數(shù)據(jù)庫,有redis請求,還有登錄和支付需要調(diào)用第三方接口,這些算慢io嗎?看文檔,沒有提供根據(jù)協(xié)程id獲取協(xié)程上下文的方法,如果用的swoole驅(qū)動,協(xié)程里有協(xié)程,怎么獲取父協(xié)程上下文
使用MongoDB的時候必須再使用之前執(zhí)行一次默認(rèn)數(shù)據(jù)庫的操作。不然會報錯Error-Call to a member function connection() on null; 臨時解決方案在support/bootstrap.php 里面初始化一下鏈接。簡單分析原因應(yīng)該是在數(shù)據(jù)庫連接池哪一塊可能忽略了對MongoDB的初始化
// 正常入庫
Db::connection('mongo')->table('channel_report_error_log')->insert(['time' => time()]);
// 不能入庫,報錯Error-Call to a member function connection() on null; 如果再此行上面添加\support\Db::select('select 1');能正常入庫
ChannelReportErrorLog::query()->insert([
'timestamp' => time(),
]);
webman中process進(jìn)程使用組件workerman/http-client,若想啟用協(xié)程需要設(shè)置eventLoop不?