Выделенный сервер или комбинированный клиент-сервер? - PullRequest
2 голосов
/ 17 декабря 2011

Я пишу игровой сервер и клиентов.Сервер генерирует мир и обслуживает его до различных клиентов игроков.Это не массовый многопользовательский режим.

Клиент (по крайней мере, на данный момент) запускает довольно требовательный программный рендер, а также выполняет стандартное моделирование на стороне клиента (которое затем подлежит утверждению авторитетным сервером), поэтомулюбая масштабируемость обработки, доступная на этом конце, была бы хороша.

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

Опять же, поскольку это , а не MMO , все игроки будут иметь доступ как к клиенту, так и к серверу, так чтоони могут настроить свои собственные серверы.У многих игроков будет только один компьютер, на котором можно разместить сервер и запустить клиент, чтобы иметь возможность играть со своими друзьями.Исходя из этого факта, что бы мне лучше служило?

  • Объединенный клиент-серверный процесс
  • Разделение клиентского и серверного процессов

... Ипочему?

PS.Даже если некоторые из вышеперечисленных сложностей будут реализованы позже, мне нужно как можно раньше понять архитектуру (в этом отношении).

Ответы [ 2 ]

1 голос
/ 17 декабря 2011

Я бы сказал, что наиболее важный аспект, который поможет вам принять решение, - есть ли какие-либо задачи, требующие большого объема вычислений, которые являются общими как для клиента, так и для сервера?Если вы можете выполнить некоторые вычисления для клиента и сервера один раз вместо двух, то имеет смысл иметь один процесс (но это может быть довольно сложно реализовать).В противном случае я говорю отдельно.

Я вижу несколько преимуществ с отдельными процессами:

  • , когда происходит сбой клиента (я бы сказал, более вероятно, со сложными средствами визуализации и / или с ошибками графических драйверов), сервер не работает
  • случайно (и / или сердитый QQ) выход из игры не убьет игру для других игроков
  • (при необходимости) проще привязать сервер к нескольким ядрам и клиент к другим
  • вывозможно, в любом случае нужно написать выделенный сервер (чтобы он мог быть размещен на удаленных серверах, возможно, без графики), а перенос его на другие ОС может быть проще ...
  • делает клиентский код в целом менее сложным

(позже я могу добавить что-то в список, если я это сделаю)

1 голос
/ 17 декабря 2011

Разделение интересов всегда является важным фактором, поэтому лучше хранить их как отдельные процессы. Это также лучше для производительности. Если я хочу использовать только функциональные возможности клиента, нет причин также хранить код сервера в том же приложении. Я запускаю его, только если мне это нужно.

...