Игровой сервер.NET

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

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

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

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

там какая-либо добрая душа там сделана такие настройки прежде? если да, что делает Вас, парни чувствуют об этом? лучший, хороший, хуже или худший для найма .NET в игровом сервере?

я искренне ценю весь .NET и эксперта разработчика игр для предоставления некоторой обратной связи для меня здесь.

спасибо,

7
задан Leo Vo 1 March 2010 в 03:31
поделиться

3 ответа

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

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

1
ответ дан 7 December 2019 в 18:42
поделиться

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

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

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

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

1
ответ дан 7 December 2019 в 18:42
поделиться

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

Подходит ли .Net? Я не знаю. Общаешься с DirectX? - пройдите, извините.

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

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

0
ответ дан 7 December 2019 в 18:42
поделиться
Другие вопросы по тегам:

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