如何拒绝和关闭django-channels 2中的连接?

时间:2019-08-21 12:37:41

标签: python django websocket django-channels disconnect

距离我开始使用django-channels已经有1个月了,现在我感觉我没有正确断开websockets的连接。 当我断开连接时,如果没有人在那儿,我想彻底摧毁该小组,这应该不存在。 当我拒绝连接时,我会发出channels.exceptions.DenyConnection或发送{'accepted':'False'} 我只是想知道这是否是做我提到的事情的正确方法。

2 个答案:

答案 0 :(得分:3)

尝试致电self.close()

From the channels Documentation:

class MyConsumer(WebsocketConsumer):

    def connect(self):
        # Called on connection.
        # To accept the connection call:
        self.accept()
        # Or accept the connection and specify a chosen subprotocol.
        # A list of subprotocols specified by the connecting client
        # will be available in self.scope['subprotocols']
        self.accept("subprotocol")
        # To reject the connection, call:
        self.close()

答案 1 :(得分:0)

据我了解,关闭群组的方法是使用group_discard。

def disconnect(self, close_code):
    async_to_sync(self.channel_layer.group_discard)("yourgroupname", self.channel_name)

如果没有对此进行测试,我将假定引发异常将导致客户端出现错误500。而收到错误的客户可能会认为这不是“正常关闭”。

在此处查看渠道文档:https://channels.readthedocs.io/en/latest/topics/channel_layers.html#groups