我有個webman項目,收到客戶端請求的時候會去調(diào)用三方接口查詢,三方接口可能不穩(wěn)定,會出現(xiàn)超時或者響應(yīng)較慢,這個時候執(zhí)行php start status 會發(fā)現(xiàn)所有的worker都是busy狀態(tài),項目基本處于掛掉的狀態(tài)。
使用top命令查看Linux服務(wù)器cpu占用很低,也就是說這個問題 我無法通過升級服務(wù)器配置解決,感覺是curl請求是同步堵塞的,不同的worker發(fā)起http請求時,好像也是堵塞的嗎?
請知道的大佬不吝賜教,萬分感謝!
換個角度提問一下,比如我的webman項目要請求很多三方的接口,并且并發(fā)能力不錯??墒侵灰袔讉€請求超時了,整個項目基本就癱瘓了,求解
busy是進(jìn)程在處理業(yè)務(wù),不一定是掛掉。
解決辦法一
多開一些進(jìn)程,例如cpu的8-16倍甚至更多,每個curl調(diào)用設(shè)置好超時時間,比如1-3秒。
解決方案二
使用workerman v5(目前是beta版本) + workerman/http-client 協(xié)程方式發(fā)起http請求
composer require workerman/workerman v5.0.0-beta.5 revolt/event-loop ^1.0.0 workerman/http-client ^2.0.0
workerman/http-client參考文檔 http://www.wtbis.cn/doc/workerman/components/workerman-http-client.html#%E5%8D%8F%E7%A8%8B%E7%94%A8%E6%B3%95