Как закрыть соединение по имени канала (выгнать пользователя)

#django-channels

#django-каналы

Вопрос:

В какой-то момент вы хотите закрыть соединение по имени канала или выгнать пользователя? Я не могу использовать self.close, поскольку я не нахожусь на этом пользователе в тот момент, когда хочу его выгнать. PS group_discard не закрывает соединение.

Ответ №1:

Вы можете отправить событие в websocket.diconnect так же, как и другие потребительские методы:

 
self.channel_layer.send(
    <channel_name>,
    {
        'type': 'websocket.disconnect',
        'code': <code>,
    }
)
  

Комментарии:

1. Да, я думаю, что методов по умолчанию не существует, и процесс будет следующим: 1) Реализовать закрытие сокета на интерфейсе, отправив команду из каналов. (именно то, что вы опубликовали) 2) Удалить пользователя из channel_group 3) В методе приема (возможно, и подключения) добавьте обработчик, всякий раз, когда от этого пользователя поступает сообщение, закройте сокет.