Прошел 1 месяц с тех пор, как я начал использовать django-каналы, и теперь у меня такое чувство, что я неправильно отключаю веб-сокеты. Когда я отключаюсь, я хочу полностью уничтожить группу, если там никого нет, и это не должно быть никаких признаков существования. Когда я отклоняю соединения, я поднимаю каналы.
Как я могу отклонить и закрыть соединения в django-channels 2?
Ответы (2)
Насколько я понял, закрыть группу можно с помощью 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
person
normic
schedule
23.08.2019
Попробуйте позвонить self.close()
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()
person
Anatol
schedule
14.03.2020
Одна вещь, которую я заметил, это то, что если вы
close
перед выполнением accept
, код закрытия не будет отправлен клиенту. accept
нужно перед закрытием для отправки кода - мне кажется ошибкой?
- person Silversonic; 12.09.2020