Об этом проекте
Gamend — это открытый бэкенд для многопользовательских игр, написанный на Elixir. Он предназначен для самостоятельного хостинга: платного хостингового сервиса нет, и проект позиционирует себя как серверный слой вокруг игры, а не как саму игру. Игра по-прежнему рендерится и симулируется локально, тогда как серверные скрипты позволяют выполнять реальную логику на сервере, поэтому начисление очков, награды, правила матчмейкинга и валидация определяются там, где игроки не могут их изменить. Фоновые и запланированные задачи также выполняются там.
Набор возможностей, описанный в README:
- Аутентификация: email/пароль, magic link, OAuth (Discord, Google, Apple, Facebook, GitHub, Steam) и JWT API-токены.
- Пользователи: профили, метаданные, токены устройств и жизненный цикл аккаунта.
- Лобби: управляемые хостом, максимальное число пользователей, скрытые/закрытые состояния, пароли и обновления в реальном времени.
- Группы: публичные, приватные или скрытые сообщества с ролями, заявками на вступление и приглашениями.
- Пати: временные группы на основе приглашений, по умолчанию от 2 до 32 игроков, интегрированные с лобби.
- Друзья: запросы, принятие/отклонение и блокировка.
- Чат: личные сообщения в лобби, группах, пати и между друзьями с курсорами прочтения и счётчиками непрочитанного.
- Уведомления: типизированные уведомления о социальных событиях, состояние прочитано/не прочитано и доставка в реальном времени, а также мобильные push-уведомления через FCM и APNs-direct с маршрутизацией по токену устройства.
- Квесты и прогрессия: событийный движок, охватывающий достижения, ежедневные/еженедельные квесты, окна событий и цепочки, с наградами ровно один раз в экономику.
- Лидерборды: глобальные и по пользователям рейтинги.
- Платежи: потоки Stripe Checkout, Google Play, App Store и Steam с проверкой чеков, вебхуками, правами доступа, возвратами и административными инструментами.
- Хранилище ключ-значение: серверное хранилище с хуками контроля доступа.
- Серверные скрипты: хуки на серверные события, такие как вход, создание лобби или завершение квеста, написанные на Elixir, GDScript (компилируемом, а не интерпретируемом) или любом языке BEAM.
- Фоновые задачи: надёжные, повторяемые фоновые и cron-задачи из серверных хуков, на Postgres или SQLite.
- Экономика и инвентарь: кошельки виртуальной валюты с атомарным, аудируемым реестром, а также стеки предметов; серверно-авторитетные grant/spend/consume с обновлением баланса в реальном времени.
- Объектное хранилище: загрузка аватаров и UGC с подключаемым бэкендом — либо локальный диск, либо любой S3-совместимый сервис, такой как AWS S3, Cloudflare R2 или MinIO.
- Админ-панель: встроенная веб-панель для управления ресурсами.
Клиентские SDK предоставляются для Godot (также указаны в Godot Asset Library), Rune через аддоны Balaur, C++17 с подключаемыми транспортами, JavaScript на npm и Elixir SDK из заглушечных модулей для автодополнения в IDE в пользовательских хуках. SDK для Godot, Balaur и C++ пересобираются при каждом изменении в main и прикрепляются к последнему релизу.
Для локального запуска требуются Elixir 1.20 и Erlang/OTP 29, Rust для нативной зависимости WebRTC (ex_sctp) и, опционально, PostgreSQL — в разработке по умолчанию используется SQLite, а адаптер базы данных выбирается во время компиляции. Первый запуск: `cp .env.example .env`, `mix setup`, `mix dev.start`, затем переход на localhost:4000. Файлы Docker Compose охватывают один экземпляр и многоэкземплярную конфигурацию с nginx, PostgreSQL и Redis. Руководство по развёртыванию и стартовый шаблон ориентированы на продакшн-развёртывание на fly.io.
README также включает график производительности, сравнивающий одновременных простаивающих игроков по размеру машины, памяти и месячной цене, ссылаясь на измеренное значение 37 854 одновременных простаивающих игроков на одном ядре с 3 ГБ против опубликованного сравнительного значения, со ссылками на документацию по производительности и нагрузочному тестированию для деталей воспроизведения. Для ИИ-инструментов предоставляется файл AGENTS.md.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.