Пользователи могут не подключаться к одному и тому же сокету - django channels

Я разрабатываю функцию чата с использованием каналов django. когда сообщение отправляется, оно создается на стороне сервера и я думаю оно транслируется. в моем потребителе я добавляю и отправителя и получателя в одну группу. на стороне клиента я использую javascript для получения идентификаторов отправителя и получателя и подключения их к websocket. но когда пользователь A отправляет сообщение пользователю B. хотя объект сообщения создается и отправляется, он не появляется для пользователя B. я проверил, что оба пользователя подключены к websocket и нет никаких ошибок. но я думаю, что проблема может быть в том, что они не подключаются к одному и тому же websocket, но я не уверен, почему это происходит. также я новичок в django channels и javascript.

Javascript

Html

Потребители

class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
    self.sender_id = self.scope['url_route']['kwargs']['sender_id']
    self.receiver_id = self.scope['url_route']['kwargs']['receiver_id']
    self.room_group_name = f'chat_{self.sender_id}_{self.receiver_id}'

    await self.channel_layer.group_add(
        self.room_group_name,
        self.channel_name
    )

    await self.accept()

async def receive(self, text_data):
    text_data_json = json.loads(text_data)
    message = text_data_json['message']
    sender_id = text_data_json['sender_id']
    receiver_id = text_data_json['receiver_id']
    
    sender_profile_picture = await sync_to_async(self.get_profile_picture)(sender_id)
    receiver_profile_picture = await sync_to_async(self.get_profile_picture)(receiver_id)

    message_obj = await sync_to_async(Message.objects.create)(
        sender_id=sender_id,
        receiver_id=receiver_id,
        content=message
    )

    await self.channel_layer.group_send(
        self.room_group_name,
        {
            'type': 'chat_message',
            'message': message,
            'sender_id': sender_id,
            'receiver_id': receiver_id,
            'sender_profile_picture': sender_profile_picture,
            'receiver_profile_picture': receiver_profile_picture,
            'timestamp': message_obj.timestamp.strftime('%I:%M %p')
        }
    )

async def disconnect(self, close_code):
    await self.channel_layer.group_discard(
        self.room_group_name,
        self.channel_name
    )

async def chat_message(self, event):
    message = event['message']
    sender_id = event['sender_id']
    receiver_id = event['receiver_id']
    sender_profile_picture = event['sender_profile_picture']
    receiver_profile_picture = event['receiver_profile_picture']
    timestamp = event['timestamp']

    await self.send(text_data=json.dumps({
        'message': message,
        'sender_id': sender_id,
        'receiver_id': receiver_id,
        'sender_profile_picture': sender_profile_picture,
        'receiver_profile_picture': receiver_profile_picture,
        'timestamp': timestamp
    }))

def get_profile_picture(self, user_id):
    return Profile.objects.get(user__id=user_id).profile_picture.url

Маршрутизация ссылок

websocket_urlpatterns = [
    path('ws/messenger/<int:sender_id>/<int:receiver_id>/', ChatConsumer.as_asgi())
]
Вернуться на верх