技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> R u ok--客户端网络优化实践

R u ok--客户端网络优化实践

浏览:1264次  出处信息

   当愤怒的用户,张牙舞爪地告诉你他遇到问题的时候,往往已经病入膏肓。--题记

   作者同全国各地愤怒的用户亲密接触了很长的时间之后,做出了以下总结,希望对后来的人们能够有一点启发。

一、用户IP是个不可靠的东西

  • 在实际的案例中,使用用户的IP地址去IP库里找用户属于哪个地域哪个运营商。

  • 不幸的是,IP库有可能不准。

  • 更不幸的是,连IP地址都可能是错的。实际案例中,我们遇到了运营商级别的流量劫持,用户本来是浙江移动,在某些服务器取得的IP居然是江苏电信。

  • 解决的办法:尽量不依赖IP,用smartDNS。或者多渠道纠正IP地址,使用本地客户端的运营商识别能力+电话号码地域识别。

  • 二、用户不是傻子,他其实都知道自己网络是好是坏

  • 许多案例,用户都会告诉你,他的QQ是好的、微信是好的,为什么你不行?你不行!

  • 看用户日志,感觉用户在撒谎。

  • 然而这并没有什么卵用。

  • 知道真相眼泪掉下来:用户在坏网络下时并不会反馈,而从坏网络->好网络时,你如果还在原来的状态下,你不行,用户就愤怒了。

  • 解决的办法:维护好socket的connect init->connecting->connected状态,任何用户的手动操作,1)天线没变,除了connected状态外,都要转圈; 2)天线变了,除了connected状态外,都要重新开始。

  • 三、用户的愤怒,还因为反应慢

  • 当socket正在创建时,用户手动重发一个数据,往往是采取转菊花和感叹号两个办法。

  • 对用户的行为硬碰硬(立即感叹号),会立即引发用户的愤怒。

  • 对用户的行为超过一定时间的转对抗(菊花),超过10秒即会引发用户的愤怒。

  • 解决的办法:设置合适的timeout值。wifi下:connect timeout 1s,send data timeout 1s(明显的大数据包要区别对待)。4g/3g/2g下:connect timeout 1s,send data timeout 10s(明显的大数据包要区别对待)

  • connect timeout的情况处理:重新发起connect。换IP。

  • send data timeout的情况处理:重新发数据2次。reconnect new ip。

  • 四、遇到了localDNS问题-不解析、乱解析

  • dns问题最好的办法:方案中不用dns。退而选之,少用dns。

  • 五、遇到了运营商加广告

  • 一般运营商只对http加广告

  • 二逼运营商还对tcp加广告

  • 解决的办法:parse数据失败时,reconnect新的地方。

  • 六、遇到了协议、端口拦截

  • 常见问题

  • 一个协议不行,换另一个。tcp|udp->http->websocket

  • 一个端口不行,换另一个。80->443->8080->14000

  • 七、遇到了EPIPE\ECONNRESET

  • 与服务器的连接中断后,send一次数据过去,如果能够到服务器,且服务器已经关了,会回一个RST,RST到了客户端,客户端此时read数据,将遇到ECONNRESET。

  • 与服务器的连接中断后,send数据时时如果已经通过RST得到对方关了,返回EPIPE。

  • 以功夫网为例,ECONNRESET的原因,是海外势力被发现后根本收不到数据或者数据乱了,就从server上关掉了socket,再过去的包就会回RST,我们再读就会显示ECONNRESET。

  • 解决办法:只有timeout值得重试,其他都reconnect吧。

  • 八、总结

  • 要想用户不愤怒,网坏时可坏,但网好要他也好。(迅速恢复)

  • 客户端各种适应环境。


   想快点找到作者也可以到Twitter上留言: @54chen

   或者你懒得带梯子上墙,请到新浪微博:@54chen

建议继续学习:

  1. 移动端网络优化    (阅读:2575)
  2. 基于HTTP缓存轻松实现客户端应用的离线支持及网络优化    (阅读:1990)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1