我正在使用通道对数据库进行长期轮询,因此我正在使用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.'
如果有人可以给我任何在哪里寻找解决方案的建议,我将不胜感激。
答案 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()
这对我有用。