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