Django Channels -在WebSocket“关闭”时执行一些东西

gjmwrych  于 2023-04-22  发布在  Go
关注(0)|答案(1)|浏览(182)

我使用的是WebsocketConsumer,该高速缓存层存储用户相关数据
WebsocketConsumer断开连接时,我会清理与用户相关的所有内容

from channels.generic.websocket import WebsocketConsumer

class MyConsumer(WebsocketConsumer):

    def connect(self):
        self.store_session_data()

    def disconnect(self, _):
        self.clean_session_data()

问题是,如果浏览器的标签页或浏览器本身关闭,断开连接不会被触发

问题

有没有办法不管WebsocketConsumer是如何关闭的都能执行一些东西?
有什么想法吗

hpxqektj

hpxqektj1#

使用WebSocket_disconnectdisconnect,无论连接是如何关闭的,我都能够正确地清理会话数据

class MyConsumer(WebsocketConsumer):

    def connect(self):
        self.store_session_data()

    def disconnect(self, _):
        self.clean_session_data()

    def websocket_disconnect(self, message):
        self.clean_session_data()
        super().websocket_disconnect(message)

**更新:**需要调用super().websocket_disconnect(message)才能正常断开

相关问题