Как наиболее правильно разработать сервер чата с комнатами на WebSocket?



@XiNull

Здравствуйте.
Имеется база данных (MySQL), в ней таблицы:
————–‐————-
– users [id, nickname, key, room_id, …] (key – ключ для авторизации, room_id – последняя комната, где был пользователь)
– rooms [id, name, user_id, …] (user_id – владелец комнаты)
————–‐————-
Есть два варианта, на каком ЯП писать серверную часть чата, GoLang и Node.JS, т.е., на двух языках написано два черновых варианта, но в двух вариантах встал на месте.
Нужно держать ~5000 человек онлайн.
При каждой авторизации мы лезим в БД (Sequelize/Gorm), проверяем, есть ли такой пользователь, если есть, то получаем информацию о нём, делаем рассылку другим о том, что зашёл новый пользователь (тем, кто в этой же комнате).

Самая главная проблема в том, что есть и дополнительные поля в БД, которые могут периодически меняться от действий пользователей.
Не лезть же каждый раз в БД, чтобы выдать пользователю информацию о других пользователях в его комнате (в которой он на данный момент), о новых параметрах комнаты.
Хранить объекты пользователей в массивах не лучший вариант, наверное. Под такое и адаптер надо писать, чтобы при изменении свойств объекта в массиве менял и в БД. Redis не особо хочется использовать, но под него надо тоже писать адаптер для обновления в БД.
Пожалуйста, кто в этой теме понимает, подскажите, как наиболее правильно всё это дело организовать и как правильно будет держать пользователей в комнатах?


Решения вопроса 1



@rPman

Что значит

Не лезть же каждый раз в БД, чтобы выдать пользователю информацию о других пользователях в его комнате

?

У тебя websocket, что подразумевает что на клиент передается оперативная информация (изменения) а не полное состояние по таймеру, значит клиент самостоятельно хранит в себе необходимую информацию в коде на javascript в массивах или localstorage, если это так критично



2

комментария


Ответы на вопрос 0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *