流量优化

服务器带宽流量

带宽跟流量是个怎么也不能忽略的问题, 如果无法做好流量优化, 服务端写得再好, 客户端依然会卡.

客户端卡顿分析

如果服务器与客户端之间, 平均流量为100k, 客户端的网络情况为200k, 那么平时推送客户端不会卡顿, 可是实际上客户端会生成某些数据,这些数据的生成需要大量的历史数据才能完成, 假设需要2M的历史数据. 那么实际上我们将花费10秒左右的时间才能完成此数据的推送. 这个时候整个客户端会表现为不走数据, 用户就会觉得, 这是什么鬼!!!

服务端计算, 只返回最后结果

一个用户一次请求2M的数据, 100个就200M了, 正常情况下不会让用户这么请求, 如果说使用2M的数据, 最后计算出来的结果是1K, 那么放在服务端计算, 然后算出最后的1k数据, 这样我们就不会对客户端造成任何影响. 可是实际上如果某些极端的情况下, 每个用户要计算的东西不一样, 如果全部放在服务端计算, 即使我们放再多的服务器, 也可能扛不住这个计算压力. 所以这个是服务器性能与流量的一个平衡. 是一种我们优先考虑的方案.

分协议下发, 限制协议速度

当没有办法, 必须下载这2M的数据的时候, 为了不卡到普通推送数据的时候, 可以限制这种数据的速度, 可以只给这种协议100k的网速, 这样在打满用户带宽的情况下, 不会影响正常数据. 实际上这种操作起来是非常麻烦的, 我们得估算用户网速, 然后拆解协议. 当然也有取巧的方法, 我们把数据包拆解成尽量小的包, 每次发送一个包的时候, 优先发送正常数据包.

拒绝垃圾流量

什么是垃圾流量

如果一份数据, 用户已经不关心了, 这份数据到了客户端也会被丢弃, 那么发送这个数据就是垃圾流量.

检测垃圾流量

怎么定义一份数据是垃圾数据, 是由服务端与客户端之间交互控制的, 服务器通过一些策略, 假如判断到用户已经打开另一个页面, 那么当前页面未发送数据可以被称之为垃圾流量.

举个栗子

依然以前面的例子, 如果这个2M为单元的数据, 用户每请求一次, 服务端就会发送2M, 用户在请求另一个那么前面一个即成为垃圾数据. 极端情况下, 用户发起了50次请求, 那么服务端会往下下发100M的数据, 然后前面98M, 都将成为垃圾数据.

垃圾数据的危害

可能造成90%的流量被浪费, 换算成钱, 还好我不是老板.... 🙁

处理垃圾数据

通过协议区分, 如果发现这个协议前面有N个包没有发出去的, 就把前面N个包都扔了, 然后发送这个包.

socket缓存与缓存

前面说了这么多, 代码的关键是数据缓存, 这里不是socket数据缓存, 而是自己写在内存的数据, 这部分数据, 完全掌握在自己手上, 通过协议区分, 一旦检测到socket可以发送数据, 即把下一份数据写入socket.

欢迎大家订阅雀观代码, 我将给你讲述, 中小企业程序员, 淘金路上的故事.



发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注