Django WebSocket每24小时断开一次连接

时间:2020-07-28 11:38:25

标签: python-3.x django websocket django-channels

该项目使用Django-Channels来实现WebSocket通信并将其与Docker容器化,但是其他组件的websocket连接每24小时自动断开一次。

Django服务器在 1000 处输出closed_code,并且组件客户端显示以下错误

DEBUG:websockets.protocol:client - received ping, sending pong: 4864436e  
DEBUG:websockets.protocol:client > Frame(fin=True, opcode=10, data=b'HdCn', rsv1=False, rsv2=False, rsv3=False)  
DEBUG:websockets.protocol:client > Frame(fin=True, opcode=9, data=b'\x16\x8e\x15\xbb', rsv1=False, rsv2=False, rsv3=False)  
DEBUG:websockets.protocol:client - event = data_received(<6 bytes>)  
DEBUG:websockets.protocol:client < Frame(fin=True, opcode=10, data=b'\x16\x8e\x15\xbb', rsv1=False, rsv2=False, rsv3=False)  
DEBUG:websockets.protocol:client - received solicited pong: 168e15bb  
DEBUG:websockets.protocol:client - event = data_received(<6 bytes>)  
DEBUG:websockets.protocol:client < Frame(fin=True, opcode=9, data=b'RrGz', rsv1=False, rsv2=False, rsv3=False)  
DEBUG:websockets.protocol:client - received ping, sending pong: 5272477a  
DEBUG:websockets.protocol:client > Frame(fin=True, opcode=10, data=b'RrGz', rsv1=False, rsv2=False, rsv3=False)  
DEBUG:websockets.protocol:client - event = data_received(<4 bytes>)  
DEBUG:websockets.protocol:client < Frame(fin=True, opcode=8, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)  
DEBUG:websockets.protocol:client - state = CLOSING  
DEBUG:websockets.protocol:client > Frame(fin=True, opcode=8, data=b'\x03\xe8', rsv1=False, rsv2=False, rsv3=False)  
DEBUG:websockets.protocol:client - event = connection_lost([Errno 104] Connection reset by peer)  
DEBUG:websockets.protocol:client - state = CLOSED  
DEBUG:websockets.protocol:client x code = 1000, reason = [no reason]  

Django WebSocket client的组件连接如下所示

try:
    async with websockets.connect(f"ws://xx.xxx.xxx.xx:8000/ws/controller/") as websocket:
        GlobalVar.set_ws_client(websocket)
        await recv_msg(websocket,comm_queue)
except (asyncio.TimeoutError, websockets.exceptions.ConnectionClosed) as e:
    print("websocket disconnect, error is "+str(e))

怀疑是Django-Channels的{​​{3}}默认值,原因是一天,但是修改参数后每24小时仍然断开连接。

我不知道为什么它导致连接断开。

如果您能告诉我如何解决它,我将不胜感激。

0 个答案:

没有答案