Отцы нашы дны Руматы, этой мой последний пост здесь

При разработе сетевой части своей стратегии я написал авторитарный сервер, который хранит в своем составе игровое поле и рассчитывает результаты ходов игроков, после чего отправляет их всем клиентам для исполнения. Это гарантирует одинаковое состояние игрового поля для всех участников. Но серверную часть я пишу на богопротивном Питони, который не имеет статической типизации (и вообще типизации как таковой). Из-за этого разработка движется не только медленно, но и вовсе - в обратную сторону. Увы, это единственный ЯП, который я смог запустить на Убунту, на которой у меня работает сервер. Локальная игра с ботами работает так же - вместе с игрой запускается exe-файл с сервером и игрок с ботами обращаются к нему так же, как и при сетевой игре.

Но мне пришла в голову светлая мысль - а что, если мне написать авторитарный сервер на любимом Богами C#? В этом логика работала бы так:

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

Благодаря этому я избавляюсь от участия Pythuhon в расчете игровой логики и сервер выполняет лишь функции приема-передачи сообщений. При локальной игре можно обращатся к виртуальной модели игрового поля без лишней прокладки. Однако, при сететвой игре клиент, на машине которого выполняется расчет, может легко подделать результаты и отправить на сервер совершенно чуждый результат. С другой стороны, едва ли поначалу кого-то заинтерисует мой проект для взлома.

Суть вопроса в том - какое из двух решений мне стоит выбрать или есть еще какой-нибудь способ организовать сетевую игру?

Это мой последний пост здесь. Остальные будут публиковаться на Enthub под тем же ником.

33
6 комментариев

У тебя как минимум есть ещё вариант писать сервер на том же Юнити и запускать его на убунту

сервер имеет 1 Гб оперативной памяти.

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