近期项目中的安卓端App,客户反馈有登录连接慢,耗时长的问题.在测试验证后,有以下分析:
出现条件
- 使用https连接的正式服务器环境.
- 安卓手机.
- 使用中国电信手机卡的流量进行连接.
- App冷启动.
在同时满足以上4点条件的情况下,安卓用户会出现App登录很慢的情况.登录是首次连接,从请求到响应需要30s左右的时间.登录成功后,后续请求连接的速度恢复正常.
问题分析和解决尝试
- 正式环境下,服务器使用的是https加密的安全连接方式.https的连接方式相对于传统的http连接方式在安全性上有极大提升.但是因为加入了加密解密的步骤,连接速度相对会慢一些.但是据我对https的理解,首次对称秘钥的传输才采取非对称加密的方式,后续的数据传输还是使用的对称秘钥加密的方式,虽然有加密和解密的过程但是应该不会耗费这么长的时间.而且在第一次连接成功后,后续的请求收发速度都会恢复正常.这个问题导致的可能性不大.
- 为了iOS客户端能上架到Apple市场,服务器必须提供IPv6的解析方式.而IPv6还远远没有达到普及的阶段,不同网络运营商的解析线路各有不同,可能存在国内->国外->国内的曲折解析路线.造成解析速度的较大延迟.按照网上的说法关闭服务器Nginx的IPv6解析后(注释
listen [::]:80 ipv6only=on;
后,reload.因为是线上环境没有重启Nginx或服务器.),问题依旧.不知道是解析没有关闭彻底还是有缓存这一类因素. - 看了这个帖子后发现问题描述是一模一样的,修改接入点从ctnet到ctwap,连接速度一下就恢复正常了,但是服务器已经关闭了IPv6的解析(不能断定肯定关闭了),也不能要求用户添加接入点(测试过的3部手机里面小米手机有ctwap接入点可以选择,华为和vivo只有一个ctnet接入点),后面发现不用添加ctwap接入点,只需要将现用接入点里面的
APN协议
修改为IPv4.效果也一样,一下就能恢复正常. - 同一个服务器,同一张电信卡,iOS客户端连接速度是正常的.难道iOS接入点的APN协议是IPv4么?这个没有查到.
- 参照《Android 网络问题调试经验》,使用tcpdump进行了电信网环境下的抓包分析,
确实有丢包现象,关闭了安卓机的tcp_timestamps后问题依旧.而且检查服务器的配置tcp_tw_recycle=0,tcp_timestamps=1
属于建议配置.至此问题还是没能解决. - 联系中国电信客服人员,反应具体情况后,电信客服人员表示他查不到是什么问题,问了技术也说没有什么办法,叫我去营业厅问问.呵呵?了.
- 后续进行了IPv6的验证.在运行同样代码的UAT测试服务器上,添加了IPv6的解析跳转,设置和正式服务器相同.使用电信流量连接测试,没有延迟的情况.故目前判断问题很大可能性出在https上.待验证.
- 后续在正式服务器上关闭了https的解析,直接使用http进行连接,问题依旧.
- 更换正式服务器的域名.使用之前的UAT的域名,更改解析为正式服务器,连接正常.修改之前的
open.xxxxx.net
为open1.xxxxx.net
连接速度也正常.最终判定可能是https证书签发时的域名保护的问题.这方面知识很是欠缺,可能存在描述错误.