gatewayworker 发送数据表速度过快客户端会掉线吗?

zzccomet

比如我给客户端发送10000个离线消息,他连线后,就通过for循环无间断给他发送。
那么客户端会不会自动断开连接?
以及gatewayworker服务器是否有什么影响。

2274 1 0
1个回答

six

这样做基本上客户端和服务端都会出问题。

从体验上来讲:
10000个离线消息全部同时发给用户,这个用户基本不会把10000个消息全部看完,假设每个消息1秒扫过也需要2-3个小时看完所有。一般只会看最新的几个或几十个。发送太多数据是一种浪费。

从性能上来讲:
第一,客户端瞬间接收10000个消息,客户端可能会直接崩溃,即使不崩溃客户端也会出现一定时间卡顿,非常影响用户体验。

第二,服务端性能损耗巨大,从存储中读取10000个消息是一个比较耗时耗内存的过程,一个用户还好,假如有成百上千个用户同时读取这么大的量,存储基本上直接死掉,整个业务直接挂掉。

cpu消耗巨大,按照你的说法for循环不间断的给一个客户发送10000条消息。每次调用接口都要消耗cpu的,如果是调用10000次接口完成这样的发送,cpu肯定会上涨,如果同时给成百上千的用户这样发送的话cpu消耗应该会非常可观。如果是调用1次接口,将10000条消息打包一次性发送cpu会节省很多。

带宽消耗巨大,10000条消息,假设每个消息大小200字节,给一个用户发送消息需要大概10000*200*8=15Mb/s的带宽才能实现秒发。如果需要同一时间给100个用户发送,需要1.5G的带宽才能实现秒发。一个idc机房出口带宽也就几十G,你算下你要花多少钱买带宽。

最终建议:
如果是要实现用户上线拉取离线消息,直接一个ajax请求到数据库里拉最后10条消息即可,如果用户想看更多,下拉消息框ajax继续加载上一个10条消息。这样基本上所有代价最小,性能最好,稳定性更好,用户体验更高。

  • 暂无评论
年代过于久远,无法发表回答
🔝