Масштабируемый реалтайм сервер на .Net Core Orleans, WebSockets и серверном Redux.
После этой статьи есть о чем задуматься. Например, использование
Redux на серверной стороне. Идея великолепна. Больше всего мне нравится "time-travel" по стейту. Это незаменимо при отладке проблем бизнес-логики! Вместо многочасового копания логов, можно посмотреть цепочку событий и историю состояний, которые привели к проблеме.
Многие разработчики не слышали о
модели акторов. Но в игровой разработке этой модели можно найти много применений.
Больше про преимущества модели в статье
на хабре, вот несколько, упомянутых в ней:
-
простота разработки. Использование асинхронного обмена сообщениями сильно упрощает жизнь когда приходится иметь дело с concurrent computing;
-
масштабирование. Модель Акторов позволяет создавать огромное количество акторов, каждый из которых отвечает за свою частную задачу. Принцип shared nothing и асинхронный обмен сообщениями позволяет строить распределенные приложения, горизонтально масштабируясь по мере надобности;
-
отказоустойчивость. Сбой одного актора может отлавливаться другими акторами, которые предпринимают соответствующие действия для восстановления ситуации (например, механизм супервизоров из Erlang-а).
Так где оно может пригодится при разработке игр?- Акторы — это, по сути, конечный автомат (
пример Akka.FSM), что является стандартным паттерном для игр
- Большинство действий в игре связано только с одним игроком, так что сервисы типа авторизации, магазина, инвентаря и т.д. могут быть легко представлены в виде акторов. Плюс ко всему вы получаете realtime систему, т.е. можете отгружать все обновления на клиент. Забудьте про REST API и поллинг
- Модель акторов имеет встроенную систему маршрутизации сообщений, с помощью них легко сделать чать для игры, представляя комнаты и пользователей как отдельных акторов. Броадкастинг из коробки :)
- Релтайм ПвП, в очень грубом сравнении, тоже похоже на чат. Юзеры отсылают свой ввод на сервер, сервер его обрабатывает, а потом броадкастит обновления всем в комнате
Хочу хочу хочу! Где взять?-
Для новичков, проще попробовать
Project Orleans от Microsoft (использованный в самой первой статье) с системой виртуальных акторов. Система виртуальных акторов на порядок прощей традиционной. Плюс ко всему это позволяет масштабироваться
без головной боли- Традиционным акторным фреймворком считается Akka, оригинально разработанный на Scala. Официально есть реализации
Scala и
Java. Но людям, работающим с Unity/C# ближе будет порт
Akka.Net.
- Для C++ решения рассмотрены в упомянутой статье с хабры:
+
QP/C++ +
Asynchonous Agents Library от Microsoft +
C++ Actor Framework +
SObjectizer