websocket在线用户过多的情况下,后台spring boot服务tcp数量不断增大,造成资源占用过多导致系统卡顿。

弱弱的咨询一个问题:

业务场景

在做消息中心系统时,实现给所有在线用户实时推送对应用户的未读信息数量。

图片描述

当前实现方式

  • 顾虑到前端写轮询来定时拉取未读数量无法实现实时看到未读数量且用户浏览器页签过多时轮询请求过多给后端造成大量的服务器压力,所以没采用轮询。
  • 当前采用的方式是,后端有个轮询判断每个用户的未读信息,然后通过websocket来给在线的用户实时推送这个对应用户的未读数量。
  • spring boot服务端启用一个websocket端点:
    @ServerEndpoint(value = "websocket/{username}")
  • 客户端创建连接:
    admin用户:this.socket = new WebSocket("websocket/admin");
    jq用户this.socket = new WebSocket("websocket/jq")。

遇到的问题

后端查看TCP连接情况是发现TCP连接数量与用户数据挂钩,尽管用户下线后tcp会响应减少,
但是当在线用户越多的情况下TCP数量也会不断增加,导致后端服务器因TCP资源占用过大问题造成卡顿。

本次咨询的问题

1.这个TCP数量不断增多是websocket本身就会这样,还是我代码处理的有问题呢?
2.除了实现分布式websocket session之外还有其他解决方案吗?能否公用相同的TCP通道来避免创建N多个TCP? 
3.哪位好心人救我下:-)?

阅读 12.7k
2 个回答

你好,解决了吗

linux下面应该问题不大,保证springboot的版本比较新。 用户过多不是问题,现在网络模型并发量单机都可以几百万,问题是一个用户的操作对cpu的占用如何。如果很消耗cpu,那么肯定非常卡,因为工作线程并不会太多。,线程处理不过来。此时只能增加硬件了。或者底层换成c++。换成c++可能最后也得增加硬件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进