1. 问题描述
上线一个新的环境,发现原来的ws连接上之后,会自动断开。查看日志发现,连接其实已经成功,但是莫名就断开了
日志参考如下
127.0.0.1:40148 - - [23/Sep/2021:18:58:18] "WSCONNECTING /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
127.0.0.1:40148 - - [23/Sep/2021:18:58:18] "WSCONNECT /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
==== 连接成功
==== 连接成功, 并且来到了最后一行
127.0.0.1:40148 - - [23/Sep/2021:18:58:19] "WSDISCONNECT /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
127.0.0.1:36798 - - [23/Sep/2021:19:01:41] "WSCONNECTING /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
从上述的日志中发现,我自己打印的连接上之后的日志全部打印出来了,并且整个连接也成功连上了,但是很快就立刻断开了。并且断开的时候并没有调用我的consumer中的disconnect
方法,相应的日志也没有打印出来。
2. 排查
nginx配置有问题???
经过运维排查,并没有发现这个环境配置与没有问题的环境有任何区别,并且该环境曾经也部署过这个服务,ws连接一直是正常的。排查修改
排查修改过的代码,发现redis配置发生过变更,换了新的redis实例。与运维同学沟通,发现新的redis的版本为4.0,而原先的redis是5.0版本
3. 解决
- 使用channel时配套使用了channel_redis,但是发现有内存泄漏问题,主要是由于channel_redis本地缓存的queque的大小没有做限制,导致的内存泄漏,该问题解决的版本在channel_redis 3.1.0 。所以我们对channel_redis这个包做了升级。
- channel_redis 3.1.0 要求使用5.0版本以上的redis,所以当检测redis版本不对时,就会导致ws连接的断开。
- 修改redis配置为一个5.0版本的实例,ws连接就正常了。