Простой способ интеграции веб-сокетов в приложение Django Rest Framework? - PullRequest
1 голос
/ 08 ноября 2019

Мое игровое приложение использует интерфейс 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? Отключить каналы каналов? (Я еще не слишком знаком с каналами.)
  • Что-то еще?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...