美文网首页
django Channel websocket 连接上后断开问

django Channel websocket 连接上后断开问

作者: Jayce_xi | 来源:发表于2021-09-24 13:57 被阅读0次

    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. 排查

    1. nginx配置有问题???
      经过运维排查,并没有发现这个环境配置与没有问题的环境有任何区别,并且该环境曾经也部署过这个服务,ws连接一直是正常的。

    2. 排查修改
      排查修改过的代码,发现redis配置发生过变更,换了新的redis实例。与运维同学沟通,发现新的redis的版本为4.0,而原先的redis是5.0版本

    3. 解决

    1. 使用channel时配套使用了channel_redis,但是发现有内存泄漏问题,主要是由于channel_redis本地缓存的queque的大小没有做限制,导致的内存泄漏,该问题解决的版本在channel_redis 3.1.0 。所以我们对channel_redis这个包做了升级。
    2. channel_redis 3.1.0 要求使用5.0版本以上的redis,所以当检测redis版本不对时,就会导致ws连接的断开。
    3. 修改redis配置为一个5.0版本的实例,ws连接就正常了。

    相关文章

      网友评论

          本文标题:django Channel websocket 连接上后断开问

          本文链接:https://www.haomeiwen.com/subject/nvqzgltx.html