Мое игровое приложение использует интерфейс Vue и серверную часть Django с DRF. Несколько клиентов подключаются к одной игровой сессии. Иногда какой-то пользователь делает что-то, что должно отразиться и на других пользователях. Для этого сервер должен иметь средства для запроса клиента на обновление данных.
Приложение Django развернуто на Elastic beanstalk. В обычной игровой сессии участвуют 10 игроков, запрос на обновление отправляется игрокам раз в 15 секунд, и я не думаю, что в обозримом будущем у нас будет более 50 одновременных игр, поэтому требования к производительности невысоки.
Я ищу простое решение для отправки сообщения с запросом на обновление клиентам.
Мое текущее решение использует сервер Redis, работающий на ec2. Когда в представлениях Django что-то изменяется, Django публикует запрос на обновление в Redis:
r = redis.Redis(host=settings.REDIS_IP, port=6379, db=0)
r.publish(game_identifier, type)
«Тип» содержит информацию о том, какие данные следует обновлять.
Кроме того, я реализовалпростое приложение Node. Все клиенты подключаются к этому приложению с помощью Websocket. Приложение также подписывается на Redis, и всякий раз, когда появляется уведомление, оно отправляется подписчикам, использующим идентификатор своей игры в качестве канала. После этого клиенты обновляют свое состояние с помощью REST. Приложение Node также запускается на Elastic Beanstalk.
Все работает, но наличие одного приложения Elastic Beanstalk и одного экземпляра ec2 только для отправки простых уведомлений клиентам кажется излишним. Я хотел бы услышать идеи, как создать это простое уведомление с меньшим количеством движущихся частей. Если бэкэнд был построен с использованием Node, я мог бы сделать это всего несколькими строками кода.
Некоторые возможности / вопросы:
- Заменить экземпляр Redis на Elasticache?
- Заменить приложение Node на Django Channels?
- Есть ли способ полностью справиться без Redis / Elasticache? Отключить каналы каналов? (Я еще не слишком знаком с каналами.)
- Что-то еще?