django频道不会断开

时间:2018-11-23 10:52:20

标签: django django-channels

我正在使用通道对数据库进行长期轮询,因此我正在使用AsyncConsumer。当网页关闭或手动刷新时,我无法运行断开连接方法。我尝试创建;

  • def disconnect(self, close_code)
  • def ws_disconnect(self, close_code)
  • def websocket_disconnect(self, close_code)

我已经尝试过在没有异步的情况下使用它们。我也尝试过用'event'替换参数。
当我第一次编写方法时,我包括了channels.exceptions.StopConsumer(),但是当它不起作用时,我在我的断开连接方法中放置了一条打印语句,仅用于测试,似乎断开方法从未触发。

很抱歉,这是一个愚蠢的问题,但是我花了3天的时间尝试可以在互联网上找到的所有内容。当我关闭或刷新页面时,终端会显示

  

'WebSocket DISCONNECT / page_name / [127.0.0.1:35748]

然后几秒钟后,有一条消息指出

 'Application instance <Task pending coro=<__call__() running at /home/ecl/.local/lib/python3.5/site-packages/channels/sessions.py:179> wait_for=<Future pending cb=[Task._wakeup()]>> for connection <WebSocketProtocol client=['127.0.0.1', 35746] path=b'/alertstatus/'> took too long to shut down and was killed.'

如果有人可以给我任何在哪里寻找解决方案的建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您应该引发StopConsumer()。

我的例子:

from channels.exceptions import StopConsumer

...

async def websocket_disconnect(self, event):
    # Leave room group
    await self.channel_layer.group_discard(
        self.room_name,
        self.channel_name
    )
    raise StopConsumer()

这对我有用。

相关问题