Стратегия сохранения идентификаторов сокетов и отправки сообщений нужным людям - PullRequest
0 голосов
/ 02 ноября 2018

Я создаю игру (React Native + Node.js + SQL Server), в которой все пользователи являются членами команды. Информация о команде и члены хранятся в базе данных.

Я планирую использовать socket.io для синхронизации всех, поэтому, когда игрок покидает команду, например, сообщение должно быть отправлено всем остальным членам команды, чтобы сказать, что они ушли.

1) Итак, мой первый вопрос: после того, как пользователь подключился и аутентифицировал себя, является ли хорошей стратегией сохранять свой идентификатор сокета в базе данных против игрока, чтобы мы всегда могли посмотреть идентификаторы сокетов каждого игрока?

2) Второй вопрос: как получить список членов команды и отправить сообщение всем им?

Я вижу, что у socket.io есть понятие "комнаты", поэтому, я думаю, я мог бы исследовать создание комнаты для каждой команды и присоединение каждого игрока к комнате, сохранение идентификатора комнаты в базе данных и т. Д., Но я предполагаю, что комната все равно должна была существовать, даже если бы ни один из игроков не был в сети, и мне нужно было бы убедиться, что у меня есть пуленепробиваемый способ подписки и отписки людей из комнат, когда они присоединились к команде или покинули ее?

Второй вариант заключается в том, чтобы просто получать список идентификаторов командных сокетов из базы данных каждый раз, когда нам нужно что-то отправить команде, выполнить цикл и отправить отдельное сообщение каждому из них. Это ужасно неэффективно или это то, что socket.io делает в любом случае? Команды - не единственные примеры сообщений, которые будут отправлены в группе; когда 3 команды играют в игру вместе, мне, возможно, придется послать сообщение всем, кто играет в игру, поэтому комнаты могут стать сложными.

Бонусный вопрос: Должен ли я сдаться и изучить Redis и оставить все в памяти, вырезать SQL-сервер и просто иметь все команды, их члены, идентификаторы сокетов в Redis? Думаю, у меня все еще есть проблема с синхронизацией БД и Redis. БД является источником всей правды, когда дело доходит до того, какой игрок в какой команде, поэтому, если бы магазин Redis не знал, что кто-то покинул команду, мы все равно продолжали бы посылать им сообщения.

Извинения за бессвязный вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...