django Channel websocket 連接上后斷開問題

1. 問題描述

上線一個新的環(huán)境,發(fā)現(xiàn)原來的ws連接上之后,會自動斷開。查看日志發(fā)現(xiàn),連接其實已經(jīng)成功,但是莫名就斷開了
日志參考如下

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/" - -

從上述的日志中發(fā)現(xiàn),我自己打印的連接上之后的日志全部打印出來了,并且整個連接也成功連上了,但是很快就立刻斷開了。并且斷開的時候并沒有調(diào)用我的consumer中的disconnect方法,相應(yīng)的日志也沒有打印出來。

2. 排查

  1. nginx配置有問題???
    經(jīng)過運維排查,并沒有發(fā)現(xiàn)這個環(huán)境配置與沒有問題的環(huán)境有任何區(qū)別,并且該環(huán)境曾經(jīng)也部署過這個服務(wù),ws連接一直是正常的。

  2. 排查修改
    排查修改過的代碼,發(fā)現(xiàn)redis配置發(fā)生過變更,換了新的redis實例。與運維同學(xué)溝通,發(fā)現(xiàn)新的redis的版本為4.0,而原先的redis是5.0版本

3. 解決

  1. 使用channel時配套使用了channel_redis,但是發(fā)現(xiàn)有內(nèi)存泄漏問題,主要是由于channel_redis本地緩存的queque的大小沒有做限制,導(dǎo)致的內(nèi)存泄漏,該問題解決的版本在channel_redis 3.1.0 。所以我們對channel_redis這個包做了升級。
  2. channel_redis 3.1.0 要求使用5.0版本以上的redis,所以當(dāng)檢測redis版本不對時,就會導(dǎo)致ws連接的斷開。
  3. 修改redis配置為一個5.0版本的實例,ws連接就正常了。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容