webman http请求超时等待导致项目卡死

诗酒田园归

问题描述

我有个webman项目,收到客户端请求的时候会去调用三方接口查询,三方接口可能不稳定,会出现超时或者响应较慢,这个时候执行php start status 会发现所有的worker都是busy状态,项目基本处于挂掉的状态。
使用top命令查看Linux服务器cpu占用很低,也就是说这个问题 我无法通过升级服务器配置解决,感觉是curl请求是同步堵塞的,不同的worker发起http请求时,好像也是堵塞的吗?
请知道的大佬不吝赐教,万分感谢!

换个角度提问一下,比如我的webman项目要请求很多三方的接口,并且并发能力不错。可是只要有几个请求超时了,整个项目基本就瘫痪了,求解

2547 1 7
1个回答

walkor 打赏

busy是进程在处理业务,不一定是挂掉。

解决办法一
多开一些进程,例如cpu的8-16倍甚至更多,每个curl调用设置好超时时间,比如1-3秒。

解决方案二
使用workerman v5(目前是beta版本) + workerman/http-client 协程方式发起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参考文档 https://www.workerman.net/doc/workerman/components/workerman-http-client.html#%E5%8D%8F%E7%A8%8B%E7%94%A8%E6%B3%95

  • tanhongbin 2023-05-01

    老大,现在支持协程了嘛,webman啥时候用上

  • walkor 2023-05-01

    上面方案二是webman http客户端协程用法

  • 诗酒田园归 2023-05-01

    感谢老大亲自 我试试 这应该就是workerman 力压swoole的原因吧 给workerman和php点赞

  • tanhongbin 2023-05-04

    这个协程是不是php得8.0以上吧

  • walkor 2023-05-04

    最低8.1

  • tanhongbin 2023-05-04

    感谢老大

年代过于久远,无法发表回答
×
🔝