Рубрики
Без рубрики

Startup Clix: Конкурс Contest Contest Serverless, написанная в JavaScript

Приложение / HACK, представленное в первой вечерний конкурс сообщества DEV .. Помечено с PuShercontest, JavaScript, AWS, Game.

После оуонных выходных о том, чтобы получить в значительной степени разрушенной.

Я наконец нашел время, чтобы написать правильный пост блога для конкурса ввода.

Я построил многопользовательскую игру Clicker с Толкатель & AWS SAM Отказ

Геймплей

Вы начинаете с семенного капитала в размере 30000 долларов.

Каждый раунд вы создаете Продукты Нажав так быстро, как вы можете и отправлять свой продукт.

Ваша прибыль цен на продукцию) рассчитывается по 500000 * кликов/миллисекунды

Вы также теряете $ 5000 каждый раунд, из-за расписания вашего запуска.

Поэтому вы, вероятно, потеряете деньги каждый раунд, ха-ха.

Если вы потеряете все свои деньги, вы выходите из игры.

Последний игрок ушел, побеждает.

Демонстрация

Ссылка на код

Куча

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

Я использовал AWS SAM, который является расширением облачности, поэтому помимо толкателя, это 100% инфраструктура в качестве кода.

Amazon API-шлюз Для HTTP-запросов. Присоединяйтесь к играм, подача продуктов каждый раунд, получая толкающие данные WebHook.

AWS LAMBDA Для всех расчетов побочных серверов. Проверка для пустых игр, расчет прибыли для каждого раунда, уведомления игроков через толкатель игровых событий ( Round: Start , Round: End и т. Д.).

AWS Шаг Функция Для координации игры. Запуск игр, стартовые раунды, призывая лямбда каждый раунд, чтобы рассчитать вещи и уведомить игроков через толкатель.

Amazon Dynamodb Для хранения игр-данных (продуктов, подсчет игрока), чтобы сделать его доступным для функций Lambda-контролируемых штан-машины.

Каналы Pusher, чтобы получить данные с заднего конца к клиентам без каких-либо потребностей в опросе.

Фронт-конец построен с Create-React-App и Bootstrap (V4 + SountSwatch схематично ).

Архитектура

Я также сделал диаграмму архитектуры:

Как видите, данные получают от игроков и толкателя через HTTP на мой сервезор без сервеса и возвращаются обратно к клиентам через каналы Pusher.

Роль каналов толкателей

Каналы Pusher позволяют клиентам широкими/многоадресными событиями без необходимости прямой связи с клиентами.

Вы просто называете Pusher HTTP-API, чтобы отправить событие, и толкатель заботится о том, чтобы распределить его клиентам.

Это довольно круто, потому что Websockets заставит вас держать открытое соединение со всеми клиентами, что невозможно с функциями лямбда. Они могут работать только около 5 минут.

Когда называется лямбда-функция (с помощью функций API-шлюза или шаговых функций), она может просто сделать свою вещь, отправить HTTP-запрос в толкатель и снова подвесить, а толкатель отслеживает открытые соединения.

PUSHER API также позволяет получить состояние всех каналов через HTTP, поэтому вы можете запустить лямбда, проверять, кто находится в сети и отправлять данные в зависимости от состояния канала, если хотите.

Проблемы

Медленное реальное время

Pusher – реклама его Каналы как в реальном времени , но это не так.

Он использует веб-технологию в своем ядре, поэтому она полностью создана на TCP и Он добавляет хотя бы один другой серверный хоп) во всей архитектуре.

Сначала у вас есть соединения WebSockets из Pusher к клиентам, которые имеют меньше задержки, чем полный HTTP-запрос для каждого события, но все же приносят несколько круглых поездок с ними.

И во-вторых, вы используете HTTP API на стороне сервера для отправки событий в толкатель, что приводит к Клиент -http-> back-end -http-> толкатель -websockets-> клиент С точки зрения задержки.

Его уникальная точка продажи – это больше толкает данные клиентам с Очень Простая настройка (отсюда название толкает, ха-ха), но не минимальная задержка.

Он позволяет использовать Client-Events, чтобы вырезать свою заднюю часть, когда средний человек, чтобы еще больше сократить задержку, но вы не можете запустить код на стороне толкателя для каждого события, что довольно много снижает полезность.

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

Вот почему я не отправляю все клики к серверу, но собираю их каждый раунд. Это позволяет одному запросу HTTP каждые 10 секунд (10 секунд раунд)

Что-то вроде лямбда для событий толкателя, работает на инфраструктуре толчков, хе-хе.

Однонаправленные шага функции

Следующая проблема была функциями AWS Step. Я нашел довольно приятно моделировать игровое состояние и раунды и т. Д. Но я не нашел способ получить данные в государственные машины легко.

Проблема заключается в следующем:

Вы определяете состояние машины. Эта станка может быть выполнена несколько раз.

Каждое состояние состояния-машины может вызвать функцию лямбда с некоторыми ввода или создать задачу действий.

У меня была идея определить игру как государственную машину, и каждое исполнение автомата – бегущая игра.

Хотя каждое исполнение может дождаться, пока активность будет завершена работником (например, API-шлюз лямбда), работник не может отфильтровать задачи в каждом действии для выполнения.

Поэтому я не смог сделать рабочие казни/специфичной игры.

Мне пришлось добавить DynamOdb в микс, чтобы получить данные в станок состояния.

Игрок отправляет готовый продукт через http (API-шлюз -> лямбда), и задний конец будет хранить его в Dynamodb, Имид Быть основным ключом.

Когда государство-машина решит раунд, завершен, например, после Ждать -Атета 10 секунд, он начинает функцию лямбда, которая смотрит в DynamOdb, рассчитывает результаты и публикует их клиентам.

Динамодб Имеет хорошие функции параллелизма, поэтому было не так уж плохо и позволило легко синхронизировать игрокам легче в конце.

Я также написал кучу блога-постов для процесса.

  • Идея конкурса Pusher: игра JavaScript
  • Идея конкурса Pusher: игра JavaScript (2)
  • Идея конкурса Pusher: JavaScript Game (3)
  • Startup Clix: Толстовые каналы присутствия с AWS SAM
  • Startup Clix: Cleanup & Fighting с Pusher State
  • Startup Clix: Eslint & Winning с состоянием приложения Pusher
  • Startup Clix: Первые шаги с AWS Step Functions
  • Startup Clix: Предварительная аутентификация и веб-кауки с толкаем
  • Startup Clix: DynamOdb и React Front-End на страницах GitHub
  • Startup Clix: наконец какой-то геймплей
  • Startup Clix: RC1 с частными играми и мобильным интерфейсом

Было весело использовать мои новые задневские навыки и увидите, что я делаю полный стопку на самом деле сейчас.

Я многому научился о толках, AWS и без промежуточностей в целом.

Я был бы признателен за все твои любимые, единороги и что нет, но даже если я не выиграю, приятно добавить этот проект в мой портфолио (может быть, после очистки, лол)

Также, как всегда, проблемы и вытягивающие запросы приветствуются. Может быть, у кого-то есть идеи, которые сделают игру действительно весело играть, хе-хе.

Я ценю все твои любит и единороги!

Оригинал: “https://dev.to/kayis/startup-clix-serverless-pusher-contest-entry-written-in-javascript-1jai”