.NET Game Server - PullRequest
       12

.NET Game Server

7 голосов
/ 01 марта 2010

У меня есть вопрос, касающийся технологии .Net Framework и игрового сервера. предположим, у меня есть несколько игровых автоматов, выступающих в роли клиента, и я хочу подключить эту клиентскую машину к игровому серверу. Как вы думаете, будет ли хорошо, если я разработаю серверное приложение с использованием .NET framework?

клиентский компьютер также разработан в технологии dotnet. Что если я расширю свой сервер до нескольких серверов, работающих одновременно, это возможно, если я использую .Net Framework на моем игровом сервере? какую технологию .Net следует использовать, .Net Remoting, веб-службы XML, COM +, MSMQ или любое другое предложение?

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

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

Есть ли добрые души, которые делали такие настройки раньше? если да, что вы, ребята, чувствуете по этому поводу? лучше, хорошо, хуже или хуже, чтобы использовать .Net на игровом сервере?

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

спасибо,

Ответы [ 3 ]

1 голос
/ 01 марта 2010

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

Эта статья может указать вам правильное направление: Многопоточный браузер игрового сервера

1 голос
/ 01 марта 2010

Я не уверен, что стандартный подход .Net будет таким, как вы хотите ...

Каждая упомянутая вами технология .Net связана с измеримыми затратами на установку и демонтаж, и WCF является одним из худших из них. Если ваша цель - производительность, вам нужно напрямую общаться с портами, а не использовать стандартную оболочку для их обработки. Я бы даже сказал, что если производительность действительно является ключевым фактором, вам нужно смотреть на прямую функцию C вместо языка .Net. (Некоторые, конечно, со мной не согласятся, но я обнаружил, что динамические языки, такие как Ruby и Python, тоже довольно быстрые)

Другой вопрос, который вступит в игру, это ваш бэкэнд данных. Если все это находится в памяти, то запуск нескольких серверов означает, что вам придется использовать какой-то механизм кэширования, такой как memcached, чтобы синхронизировать все ваши данные. Если вы собираетесь использовать базу данных, я бы предложил использовать несколько портов, один из которых подключен к вашей базе данных, а другой - только на основе памяти. Преимущество, которое вы получаете, заключается в том, что данные, для которых не требуются базы данных, могут работать в пространстве памяти, которое работает так же быстро, как и компьютер, и процессу не нужно ждать дорогостоящих соединений с базами данных.

WCF / .Net Remoting / COM + / и т. Д. Отлично подходят для бизнес-приложений, где оборот за 1 секунду не убьет вас, но в среде реального времени, где каждая миллисекунда имеет значение, вам необходимо иметь возможность управлять весь коммуникационный стек с момента получения первого пакета до закрытия соединения. Каждый коммуникационный стек .Net, который я использовал в средах реального времени, добавлял почти 100 мс к каждому запросу. Вырезав посредника и работая напрямую с клиентом (т. Е. Читая поток прямо из порта и затем отправляя поток прямо в порт), я сократил эту стоимость и вернул время назад. Когда вы обрабатываете десятки тысяч запросов в минуту, это время становится очень важным.

0 голосов
/ 01 марта 2010

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

.Net - это путь? Я не знаю. Общаетесь с DirectX? - прости, прости.

Клиенты и сервер находятся в одной локальной сети? Они подключаются через Интернет? Для чистой производительности я хотел бы. Net Remoting. Для связи в целом вы можете рассмотреть WCF, так как вы можете в значительной степени изменить способ связи, изменив конфигурацию (например, создание очередей для веб-служб). Сказав это, чтобы извлечь максимальную пользу из чего-то вроде очередей, вам, возможно, нужно быть осторожным в том, как вы на самом деле проектируете конечные точки.

Вы говорите о масштабировании сервера? Я думаю, вы захотите использовать какой-нибудь балансировщик нагрузки с несколькими узлами под этим? Это может быть полезно: http://www.codeproject.com/KB/IP/remotingdesigndecisions.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...