Большинство пользователей, впервые знакомых с Django-channel 2.x, сталкиваются с этой проблемой.позвольте мне объяснить.
<b>self.channel_layer.group_add("gossip", self.channel_name)</b>
принимает два аргумента: имя_команды и имя_канала
Когда вы подключаетесь из браузера через socket
к этомупотребитель, вы создаете новое сокетное соединение с именем <b>channel</b>
.Таким образом, когда вы открываете несколько страниц в браузере, создается несколько каналов.Каждый канал имеет уникальный идентификатор / имя: <b>channel_name</b>
<b>room</b>
- это группа каналов.Если кто-то отправит сообщение на <b>room</b>
, все каналы в этом <b>room</b>
получат это сообщение.
Итак, если вам нужно отправить уведомление / сообщение одному пользователю, вы должны создать<b>room</b>
только для этого конкретного пользователя.
Предполагая, что текущий user
передается в scope
.
<b>self.user = self.scope["user"]
self.user_room_name = "notif_room_for_user_"+str(self.user.id) ##Notification room name
await self.channel_layer.group_add(
self.user_room_name,
self.channel_name
)</b>
Всякий раз, когда вы отправляете / транслируете сообщение на user_room_name
, Он будет получен только этим пользователем.