该项目使用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小时仍然断开连接。
我不知道为什么它导致连接断开。
如果您能告诉我如何解决它,我将不胜感激。