sung_luo 2024-04-03 09:22 采纳率: 0%
浏览 5

django channel聊天室

以下是django channels 聊天室的代码,报错,怎么解决

python
class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.room_name = self.scope["url_route"]["kwargs"]["room_name"]
        self.room_group_name = "chat_%s" % self.room_name

        # Join room group
        await self.channel_layer.group_add(self.room_group_name, self.channel_name)

        await self.accept()

    async def disconnect(self, close_code):
        # Leave room group
        await self.channel_layer.group_discard(self.room_group_name, self.channel_name)

    # Receive message from WebSocket
    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json["message"]

        # Send message to room group
        await self.channel_layer.group_send(
            self.room_group_name, {"type": "chat_message", "message": message}
        )

    # Receive message from room group
    async def chat_message(self, event):
        message = event["message"]

        # Send message to WebSocket
        await self.send(text_data=json.dumps({"message": message}))

Application instance <Task pending name='Task-13' coro=<StaticFilesWrapper.__call__() running at D:\python10\lib\site-packages\channels\staticfiles.py:44> wait_for=> for connection <WebSocketProtocol client=['127.0.0.1', 60523] path=b'/ws/chat/lobby/'> took
too long to shut down and was killed.

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-03 09:28
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这个错误提示是因为在关闭WebSocket连接时花费的时间太长,导致应用程序等待时间超过了限制,从而被强制关闭。解决方法是优化关闭WebSocket连接的代码,以使其能够在短时间内完成。 以下是一些可能导致关闭WebSocket连接时间过长的代码示例,并提供了优化的解决方案: 代码示例一:使用无限循环 可能在以下代码中使用无限循环等待来关闭WebSocket连接,导致时间过长: async def disconnect(self, close_code):
    while True:
        # Do something
    

    优化方式: 将无限循环改为使用异步定时器,并在指定时间后强制关闭WebSocket连接: async def disconnect(self, close_code): # Wait for 3 seconds before closing await asyncio.sleep(3) await self.close() 代码示例二:未处理异步任务 可能在以下代码中未正确处理异步任务,导致关闭WebSocket连接时间过长: async def disconnect(self, close_code): await self.do_async_task() # Do something else 优化方式: 在调用异步任务时,使用await确保异步任务的结果被处理完成: async def disconnect(self, close_code): await self.do_async_task() # Do something else # Ensure all tasks are completed await asyncio.gather() 通过以上的优化,可以避免出现WebSocket连接关闭时间过长的问题。另外,还可以通过修改settings.py文件中的配置来调整WebSocket连接关闭时间的上限,以避免类似错误的发生: CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [("localhost", 6379)], "expiry": 10, }, }, }

    评论

报告相同问题?

问题事件

  • 创建了问题 4月3日

悬赏问题

  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题