@XiNull

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

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

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

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

Войдите, чтобы написать ответ

Похожие вопросы