При отправке сообщений группе при помощи django channels, сообщения за всех получает один WebSocket
При отправке сообщений одним каналом группе, это сообщение получают не все каналы, состоящие в группе, а только один случайный канал. Если в группе было 3 канала, то этот один канал получает три экземпляра сообщения, а остальные - ничего. В чем может быть проблема?
# consumers.py
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
room_id = int(self.scope['url_route']['kwargs']['room_id'])
room = await get_room(room_id)
self.chat = await get_chat(room)
chat_name = str(self.chat.id)
self.chat_group_name = 'chat_%s' % chat_name
self.user = self.scope['user']
if room_id == 19 or await is_user_in_room(self.user, room):
# Join room group
await self.channel_layer.group_add(
self.chat_group_name,
self.channel_name
)
await self.accept()
else:
await self.close()
async def disconnect(self, close_code):
# Leave room group
await self.channel_layer.group_discard(
self.chat_group_name,
self.channel_name
)
# Receive message from WebSocket
async def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
message = await save_message(self.user, self.chat, message)
await self.channel_layer.group_send(
self.chat_group_name,
{
'type': 'chat.message',
'message': message
}
)
# Receive message from room group
async def chat_message(self, event):
message = event['message']
print(self.user, self.channel_name, self.chat_group_name)
"""
Если подключены три канала, выводит три различных
пользователя,три различных названия канала, три одинаковых
названия группы
"""
# Send message to WebSocket
await self.send(text_data=json.dumps({
'message': message
}))
var ws = new WebSocket("ws://localhost:8000/ws/room_chat/19/");
ws.send(JSON.stringify({
message: this.state.struct
}));