curl库处理https消息慢问题定位

本文分析了使用curl进行HTTPS通信时出现的高延迟问题,并详细记录了排查过程,最终确定了TLS握手耗时过长为主要原因。通过更换采用openssl的curl版本解决了此问题。

项目中使用curl与服务器进行https的通信,每次消息来回几乎都要超过200ms。这个时间太长,需要优化。

首先,就是定位问题出在哪儿。记录如下:

是服务器的问题吗?

用postMan和curl命令行,发送同样的消息到服务器,测试处理时间通常都在100ms以下,所以不是服务器的问题。

让curl输出更多信息

 	curl_easy_setopt(easyHandle,  CURLOPT_VERBOSE, 2L);

哪一步花时间长?

通过curl_easy_getinfo接口,获取到每一步花费的时间。确认是tls握手时间太长。

	    curl_easy_getinfo( easyHandle,  CURLINFO_TOTAL_TIME, &totaltime );
        curl_easy_getinfo( easyHandle,  CURLINFO_NAMELOOKUP_TIME, &namelooktime );
        curl_easy_getinfo( easyHandle,  CURLINFO_CONNECT_TIME, &connettime );
        curl_easy_getinfo( easyHandle,  CURLINFO_PRETRANSFER_TIME, &pretransfertime );
        curl_easy_getinfo( easyHandle,  CURLINFO_STARTTRANSFER_TIME, &starttransfertime );
        curl_easy_getinfo( easyHandle,  CURLINFO_APPCONNECT_TIME, &appconnecttime );

测试各种参数

没发现有什么参数有影响。

获取最新版本curl库

用同样的代码,换了个系统安装的curl库,发现速度提上来了,与命令行测试相当。系统的库版本号与SDK中不一样。以为是curl版本的问题。决定更新curl库。

最终的原因

然而,在后面的折腾中才发现并不是curl版本的原因。curl要支持https,需要用其他库。我们项目中使用的是axtls库。这是一个支持嵌入式的,非常简化的版本。而系统安装的curl库,使用的是openssl。差别在这里。

解决方案

还是决定替换一个比较新的curl版本,带openssl的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值