Django Channels Channels-redis Как я могу получить доступ к базе данных redis и как я могу ее использовать?

Я впервые использовал Django Channels и впервые Redis через Channels. Я хочу использовать данные, хранящиеся в сервере redis, которые в данный момент используются django, или сохранить их в сервере redis.

  1. При отображении чатов я хочу использовать channels_layer.receive_count, чтобы показать количество людей, обращающихся к чату (как в Twitch)

    .
  2. Когда я захожу в чат, я хочу перечислить информацию о находящихся там пользователях.

Было бы здорово, если бы вы подсказали мне, как это сделать. Спасибо!

<<<Я не уверен, что

точно channels_layer.receive_count соответствует количеству активных пользователей. Вот альтернативный вариант.

Вы можете использовать промежуточное программное обеспечение сессий Django, чтобы дать каждому пользователю уникальный session_key. Затем используйте его для создания списка active_users.

class RoomsConsumer(AsyncWebsocketConsumer):
    active_users = {}

    async def connect(self):
        self.room_id = self.scope['url_route']['kwargs']['room_id']
        self.room_group_name = 'room_%s' % self.room_id

        # Add user to room count
        session_key = self.scope['session'].session_key
        if self.room_id not in self.active_users:
            self.active_users[self.room_id] = [session_key]
        elif session_key not in self.active_users[self.room_id]:
            self.active_users[self.room_id].append(session_key)
        # ...

    async def disconnect(self, close_code):
        # Remove user from room count
        session_key = self.scope['session'].session_key
        if self.room_id in self.active_users and \
           session_key in self.active_users[self.room_id]:
            # Remove my session key from the list
            self.active_users[self.room_id] = list(filter(
                lambda x: x != session_key,
                self.active_users[self.room_id]))

Смотрите: https://github.com/ccnmtl/mathplayground/pull/270/files

user_count = len(self.active_users[room_id]) будет представлять собой количество активных пользователей в данной комнате.

В вашем представлении django вы должны убедиться, что у каждого пользователя действительно есть сессия: https://github.com/ccnmtl/mathplayground/blob/main/mathplayground/rooms/views.py#L9

Вернуться на верх