我司的app在2018年有一阵子有用户持续反馈网络卡顿。终于花了点力气完善了监控。因为主要是反馈的socket那块的业务,所以对socket请求收发流程分为7个阶段进行了监控,分别是:请求调用,请求入队列,请求开始发送,请求发送成功,收到响应,响应入队列,响应数据解析分发。
当然除了客户端监控数据外,还和服务器数据整合了,能更加准确看到卡顿的占比。
客户端用的是生产者消费者加阻塞队列的模式。遇到了Tcp队头阻塞的问题。一旦进个电梯或者地下室,出现了弱网情况,请求开始发送和请求发送成功的时间差就会急剧放大,而这两个时间段之间仅仅只有一行out.write(data)。前面一个没发完,队列里的都被堵住了。
后来,准备尝试Nio的方式,把请求发送的时间给压下去,但后来想想数据好看了,并不解决实际问题,发不出去还是发不出去,于是作罢。
也想问问各位大佬,有没有好的建议?
展开
作者回复: 弱网络的时候会尽量保证信令网络有可能成功