18

Фреймворк для онлайн игр

Всем привет! Запушил на гитхаб свой пет-проект. Это фреймворк для онлайн игр и приложений написанный на Node.js и Typescript, клиентская часть на Unity и C#.

Для чего это всё?

Можно делать многопользовательские онлайн игры и билдить под Android, iOS и WebGL, бесплатно, без регистрации и смс. Сейчас расскажу подробнее.

Давным-давно был такой проект на гитхабе Pomelo. По меркам интернета – реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал Node.js, JavaScript и TypeScript позднее.

Когда что-то стало получаться, переписал всю серверную часть на TypeScript и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.

Shardy – это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т.п. Есть клиент на TS встроенный в фреймворк, а также пакет для Unity, который поддерживает сборки под iOS, Android и WebGL.

Основные фичи:

- микросервисная парадигма
- простой API: RPC, команды, подписки и т.п.
- транспорт данных через сокеты и вебсокеты
- легкость и быстрота: Node.js и TypeScript
- поддержка пользовательской сериализации
- поддержка пользовательской валидации рукопожатий (handshake)
- продвинутый логгер: теги, фильтры, области
- справочные материалы: документация, сниппеты, примеры
- почти нулевая конфигурация

Есть демка с примерами работы API и простенькая онлайн игра "Крестики-Нолики": как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть документация с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.

Ниже, пример WebGL билда с игрой "Крестики-Нолики".

В примере реализовано:

  • старт/остановка поиска свободных игр

  • простой матчмейкинг

  • отправка команды хода игрока

  • отправка команды выхода из игры

  • обнаружение ничьей и конца раунда

  • сохранение текущего счёта

Основная цель Shardy – предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).

Да, пока это голый фреймворк без полезной нагрузки в виде готовых каких-то решений, модулей, примеров игр и т.п. И да, входной порог есть, нужно уметь в Node.js и Typescript, чтобы делать серверную часть. Поэтому буду добавлять полезности по мере возможностей.

Приглашаю всех заинтересованных инди и не только, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru.

Shardy

Shardy for Unity

Shardy Tic-Tac-Toe server

Docs

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"