Skip to content

Repository files navigation

Ruleshift

Authoritative multiplayer state — without drift

Go-сервис для разработчиков игр, который принимает protobuf-команды, последовательно применяет их в комнате и раздаёт всем клиентам одну согласованную ленту ревизий.

Go 1.26 protobuf v2

Сайт проекта · Документация на русском · English documentation

Зачем Ruleshift

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

Игра подключается как внешнее gRPC/protobuf OCI-изображение. Поэтому игровой модуль можно разрабатывать и выпускать отдельно — ядро Ruleshift пересобирать не требуется.

flowchart LR
    C["Unity / player client"] -->|"protobuf v2"| G[Gateway]
    G --> R["bounded sequential room"]
    R -->|"gRPC ABI + current state"| M["developer OCI module"]
    M -->|"next state + projections"| R
    R --> S["events + snapshots"]
    D["trusted backend / SDK"] --> A["Developer API v2"]
    A --> K["validation + Kubernetes scheduler"]
Loading

Быстрая навигация

Если вы хотите… Начните здесь
Понять устройство системы Архитектура · русская версия
Подключить player client Unity client · клиент Unity на русском
Создать и опубликовать игровой модуль Module development · русская версия
Разобраться с wire protocol Protocol v2 · русская версия
Управлять модулями и комнатами Developer API v2 · русская версия
Подключить Steam-аутентификацию Steam integration · русская версия
Настроить production-наблюдаемость Observability · k3s deployment
Настроить промокоды для game jam Game jam promotions · OpenAPI
Посмотреть модель хранения Database · русская версия
Изучить benchmark scope Performance report · русская версия

Что демонстрирует MVP

  • бинарный WebSocket-протокол на protobuf v2;
  • последовательную обработку команд в комнате с bounded queues;
  • непрозрачное состояние модуля и recipient-specific public/private/full projections;
  • immutable pinning комнаты на developer, module, version и image digest;
  • snapshots и generic event replay через точно зафиксированную версию модуля;
  • Developer API v2 для публикации OCI-модулей, валидации, активации и создания комнат;
  • PostgreSQL control DB и изолированные module databases;
  • tenant isolation и безопасное планирование модулей в Kubernetes.

Быстрый старт

Требования: Go 1.26, Docker и PostgreSQL для локального запуска gateway.

# Запустить локальный PostgreSQL
docker compose up -d postgres

# Проверить проект
go test ./...
go vet ./...

# Запустить gateway
go run ./cmd/gateway

Для production gateway нужны PostgreSQL и Kubernetes. Основные переменные окружения:

RULESHIFT_DATABASE_URL
RULESHIFT_DATABASE_ADMIN_URL
RULESHIFT_DEVELOPER_API_KEY
RULESHIFT_KUBECONFIG        # опционально при запуске внутри кластера

Полный список endpoint'ов и конфигурации находится в Developer API и документации по observability.

Контракты и примеры

Production WebSocket endpoint: /v2/ws. Протокол v1 намеренно несовместим и отклоняется сервером.

Высокопроизводительная основа

Горячий путь построен вокруг небольшого количества предсказуемых компонентов: bounded queues, один последовательный room runtime, бинарная сериализация protobuf и отсутствие сетевых записей внутри room loop. Долгие операции используют context.Context, а ошибки игрового модуля не меняют состояние и revision.

Измерения и команды для воспроизведения находятся в Performance report.

Безопасность и отказоустойчивость

Каждый tenant получает отдельный namespace, pull Secret, ResourceQuota, LimitRange и default-deny network policy. Module pods запускаются без root, с read-only filesystem, RuntimeDefault seccomp, без capabilities, service-account token и внешнего egress.

Некорректный, слишком большой или несоответствующий типу ответ модуля считается нарушением протокола. После трёх таких нарушений за 60 секунд версия деградирует, и новые комнаты не смогут её использовать.

Статус проекта

Уже реализовано: authoritative room runtime, protobuf v2 gateway, persistence, 24-часовые коды приглашения комнат, module ABI, Developer API v2, OCI module lifecycle, Kubernetes scheduling, observability, Unity/.NET SDK и conformance examples.

В дальнейших итерациях: расширение SDK для player-клиентов, полноценный Steam-поток авторизации, более глубокие load tests и расширение card-game state.

Лицензия и вклад

Проект находится в активной разработке. Перед изменением архитектуры сверяйтесь с AGENTS.md и соответствующим разделом документации.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages