Enapiuz
@Enapiuz
велосипедостроительное бюро

Оптимальная архитектура сервера сетевой игры?

Доброго времени суток.
Начал делать простую сетевую игру. Сделал основу сервера на ASP.NET WebApi и SignalR и клиент на node-webkit. Пока пушился последний коммит я понял, что делаю все совершенно не так, как оно должно быть и надо все в корне переделывать. Отсюда появилось несколько вопросов:
  • Полагаю, что жизнь очень упростит отдельный сервер авторизации. Как его нынче принято делать? Смотреть он должен только в локальную сеть, вероятно, а приложения (сайт, игровые сервера) проверяют у него правильность логина/пароля, получают роли? Нормально ли, если он будет предоставлять некий REST-интерфейс, а к нему будут делаться HTTP-запросы?
  • Серверная среда выполнения. Терзают меня смутные сомнения, что ASP.NET является правильным выбором, но аргументировать не могу. Единственные альтернативы, что приходят в голову - это Node.js (или же IO.js) и Erlang. Перестроить мышление и поменять привычки под второй довольно затратно, хотелось бы в этом году уже демо получить какое-никакое, учитывая, что свободного времени заниматься этим проектом у меня крайне мало. А насчет ноды у меня смешанные чувства - видел кучу статей, где ее обливают как только могут (и память течет, что только "перезапуск раз в минуту поможет", и адовая отладка и вообще все ужасно), но при этом она вся такая асинхронная, быстрая и вообще надо писать только на ней. Так все же, как сейчас дела с ней обстоят? Можно ли ее, например, развернуть в кластере без диких танцев с бубнами? Чтобы был некий мастер сервер, который распределял бы задачи между slave-серверами. Либо организовать какой-нибудь простой прозрачный обмен сообщениями между нодами, а-ля эрланг. Стоит ли это вообще того или есть какие-нибудь бест-практис по части архитектуры масштабируемых игровых серверов на ноде? Игра будет реал-тайм, сокеты точно будут нужны, в этом плане пхп для игровых серверов не очень подойдет, наверное.
  • В итоге картина мне видится как-то так: сервер авторизации, сервер с сайтом, логин сервер для подключения клиентов и выплевывания в них состояния игрового мира, обновлений, новостей и может быть списка шардов, если запустить большой сервер в кластере будет проблематично и, собственно, сами игровые сервера. Все это добро дергает сервер авторизации при доступе к ним. Адекватная ли это схема?

Конкретным технологиям предпочтения не отдаю, но изначально есть опыт с JS, PHP, а C# в процессе изучения. В плане БД NoSql решения использовать особо не хочется, может быть это будет постгрес из-за сего гибкости. И да, я понимаю, что если говорить о таких масштабах и архитектурах, то я уже должен быть в состоянии сам с ней определиться, но сталкиваясь в жизни с ситуациями, когда проекты начинались лишь бы как, а потом такими и оставались, либо был долгий, мучительный и дорогой рефакторинг, то хотелось бы с самого начала пути пойти в правильную сторону.
Извиняюсь за возможную сумбурность, завтра днем может подредактирую ворос.
  • Вопрос задан
  • 5345 просмотров
Решения вопроса 1
Tiendil
@Tiendil
Разработчик ПО.
предевременная оптимизация — ЗЛО
KISS

Вы хорошо описали, что хотите сделать, но ни словом не обмолвились о том зачем Вы это хотите:

- какого типа планируется взаимодействие игрока с сервером?
- какие предполагаются нагрузки? Средняя, пики…

Без знания ответов на эти вопросы, ответ на Ваш вопрос один: делайте как Вам приятно. Потому что критериев выбора архитектуры не приведено.

Вот универсальное правило принятие решений: «Х решает какую-то проблему? Если решает, делаем Х, если не решает — не делаем.»
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
swanrnd
@swanrnd
Издатель HTML5 игр
Насчет авторизации всегда проще проверить какой-нибудь авторизационный ключ. Чем проверять логин и пароль. Но это не критично.

Хранить подобное лучше в ОП. id клиента - ключ - роль

Пишите на ASP.NET, это не плохая технология. На ней напишите лучше, чем на NodeJS, если будете изучать последний пару месяцев.

Еще хорошо бы отдельный сервер для статики или CDN.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы