- 我正在尝试构建一个具有两个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"字面意思是,您正试图在已关闭的连接上发送消息。根据我从你的问题中了解到的情况,当用户进入房间时,你会保留一份属于房间的用户列表,并向房间的所有其他用户广播此欢迎信息。但是,如果一个用户断开了连接,或者某个特定用户的底层连接关闭了,该怎么办?在这种情况下,您将得到上述错误。
可以解决这个问题的是,在读取/写入连接上的消息时,您应该始终检查连接关闭异常,并在发生此类异常时标记用户已断开连接。