运行时错误:发送"websocket.close"后出现意外的 ASGI 消息"websocket.send"


  • 我正在尝试构建一个具有两个websocket端点的聊天服务器。一个供房间所有者创建_room,另一个供其他想要加入房间的人使用
  • 我有"房间"one_answers"房间管理员"课程。文件室包含成员列表和其他文件室信息。作为"RoomManager"帮助创建房间并接受人们进入房间
  • 当用户尝试使用room_id进入房间时,我正在向room_owner发送是否将该成员添加到房间的请求。当用户接受时,我正在将该成员添加到文件室中的成员列表中
  • 当一个新用户试图进入一个房间并且所有者接受它(通过发送"是"(时;xxxx已进入房间";。当我尝试广播时,它显示了这个错误";RuntimeError:在发送"websocket.close"之后,意外的ASGI消息"websocket.send";。这是回购的链接。我听说过发送乒乓球框架,但没有找到实现它的文档

repo中的文件解释:

  • app.py:包含http和websocket端点

  • room_manager.py:有room和RoomManager类。

  • connection_manger.py:fastapi文档提供的默认连接管理器。用于在用户加入任何房间之前存储临时连接。

这是指向cmd日志的链接。

错误"RuntimeError:在发送"websocket.close"之后,意外的ASGI消息"websocket.send"字面意思是,您正试图在已关闭的连接上发送消息。根据我从你的问题中了解到的情况,当用户进入房间时,你会保留一份属于房间的用户列表,并向房间的所有其他用户广播此欢迎信息。但是,如果一个用户断开了连接,或者某个特定用户的底层连接关闭了,该怎么办?在这种情况下,您将得到上述错误。

可以解决这个问题的是,在读取/写入连接上的消息时,您应该始终检查连接关闭异常,并在发生此类异常时标记用户已断开连接。

相关内容

最新更新