Задать вопрос
@kazmiruk

Как организовать динамический список игр, доступных для подключения?

Есть игра, суть которой заключается в создании одним игроком сражения, к которому могут подключаться другие игроки (заданное количество).

Используемые технологии:

веб сокеты (сервер с использованием gevent);

веб сервер (используется для ajax запросов покупки товаров, работы с инвентарем и т.п., а также для генерирования страницы с игрой).


Сейчас появилась задача сделать список доступных для подключения игр, который меняется по следующим событиям:

— игрок создал игру;

— другой игрок подключился к игре (оставшееся кол-во мест в этой игре должно измениться или игра должна уйти из списка, если уже максимум);

— игрок передумал подключаться к игре (изменение кол-во оставшихся мест);

— игрок отменил создание игры (удаление из списка).


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

Сейчас рассматриваю два варианта:

— запрос списка игр из базы\кеша через ajax каждые 20 (или 10, 30, 50) секунд. Из плюсов — снижение нагрузки (первый пользователь запрашивает из базы, данные кешируются на 20 секунд и остальные забирают из кеша), из минусов — игрок несвоевременно узнает, что игра, к которой он подключается уже недоступна (можно снизить до 5 секунд или 10, но насколько это будет эффективно);

— каждое событие изменения списка транслируется через веб сокеты всем игрокам, подключенным к серверу. Плюсы — моментальное изменение списка, минусы — изменения, как я говорил будут происходить довольно часто и каждое изменение надо будет отослать всем, что может привести к лавине запросов.


Как бы вы организовали подобный функционал?
  • Вопрос задан
  • 3249 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
dizballanze
@dizballanze
Software developer at Yandex
Второй вариант, но не web-сокеты, а что-то вроде socket.io, т.к. web-сокеты далеко не везде работают.
Для решения проблемы с волной запросов, можно комнаты обновлять постранично. Т.е. явно все комнаты не нужно будет одновременно показывать на экране (просто не влезут), соответственно, подписывать пользователя только на изменения в тех комнатах, которые сейчас показываются на экране.
Ответ написан
Комментировать
SiDChik
@SiDChik
Если расчитано что после каждого обновления почти всегда обновляется список, то логично просто проверять новый список серверов… Но по моему чаще всего проще сделать чтобы игрок сам обновлял…
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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