workerman网站上下载的静态php的curl扩展存在超时设置无效的问题

qiye1

问题描述

如题,自己本想写个在网页里实现向aria2提交下载任务的功能,使用到php的curl扩展来向aria2的rpc服务提交下载任务,发现在aria2没有开启的情况下,会出出现curl长时间等待的情况,就会出现整个worker进程被curl阻塞,无法响应其他正常请求,即使设置了curl的超时时间为毫秒级也没有用(curl_setopt($ch, CURLOPT_TIMEOUT_MS,$outtime);),大概会阻塞5秒

程序代码或配置

起初还以为是其他请求代码造成了超时,所以先把其他业务代码删除了,直接在onmessage里new aria2对象来实验

curl执行curl_exec耗时记录,超时毫秒数设置由post方法的参数传入,执行前记录到t0,执行后记录到t1,然后输出差值

我的post方法超时设置为200毫秒

重现问题的步骤

这是官方网站上下载的静态php版本执行的情况,可以看到启动命令是./php,版本是8.3.12,截图里输出yy5.00995,就是阻塞耗时5秒,而上面post方法传入的超时为200毫秒

这是用我系统的php执行情况,可以看到启动命令是php,版本是8.2.6。截图里输出yy0.0071709,阻塞就没有那么严重

操作系统环境及workerman/webman等具体版本

这里写具体的系统环境相关信息
ubuntu

166 2 1
2个回答

walkor 打赏

PHP的curl要设置毫秒超时的话,需要设置 curl_setopt ( $ch, CURLOPT_NOSIGNAL, true);

qiye1

aria2的RPC地址没有问题的情况下请求耗时都是在10毫秒左右,哎,因为粗心,导致浪费一大把时间


  • 暂无评论
×
🔝