netty websocket集群下遇到的问题

记一次集群环境下websocket频繁断开的问题及原因

前言:

  项目是一个前后端分离的项目,前端使用react,后端使用springCloud,由于业务需求,公司大部分场景需要用到实时通知,系统使用人数较多,在网上主要比较了tigase和websocket两种推送,最终选择了websocket。这里简单介绍一个几种实现方式,第一种是自己基于netty方式实现websocket,第二种是tomcat自带的websocket,第三种是spring封装的websocket,第四种是使用第三方封装的netty-socketIo。这里主要讲一下第四种实现方式。

  在开发的第一版中使用netty实现websocket,但是线上集群环境频繁出现连接又断开的情况,有时连接稳定3分钟,有时20秒,刚开始以为是长连接超时自动断开引起的,于是加了一个业务心跳,5秒钟处理一次,保持连接,但是...依然还是会出现断开的情况。无奈...

  继续寻找问题,寻找是否是代理的问题、nginx超时设置并无异常。。。于是又从前端webpack的代理寻找问题...单个账号连接的时候发现真的是稳定的一p,并未出现连接问题,但是人一多,又会出现频繁断开连接...于是乎又在猜想是不是网络的问题...发现网络也没问题(心态炸裂...),无奈...

  考虑到websocket服务是写在zuul路由模块中的,不知道是否和zuul有关系..在偶然的一篇文章中看到了说低版本的zuul1.x不支持ws协议..于是打开zuul版本一看... 

解决方案:

  把netty 换成netty-socketIo通信,前端需要声明连接类型为:transPorts:["websocket"],后端配置的时候也需要声明

  不然集群环境下会抛出session unauthorized register 然后断开连接。

原文地址:https://www.cnblogs.com/veblen/p/14085203.html