Сетевой трафик, MMO Tower Defense

Я программирую игру MMO Tower Defense (архитектура клиент-сервер). Из-за защиты от читерства сервер должен иметь логику. Но у меня есть реальная проблема дизайна. Когда, скажем, 10 человек сражаются друг с другом в смертельном бою, каждый выстрел в башню должен быть рассчитан и отправлен игрокам. Когда много башен построено. (Например, 10 игроков * 10 башен = 100 башен) трафик очень высок. (Один игрок вызывает много сообщений в секунду) Как решить эту проблему?

Сервер написан на Java (Smartfox 2x) Клиент написан на C# (Unity 3d)

Заранее спасибо.


person Mileseven    schedule 20.01.2014    source источник
comment
Как вы в настоящее время осуществляете связь между сервером и клиентами? Какие языки вы используете?   -  person PeeHaa    schedule 20.01.2014
comment
Я использую unity3d (С#, клиент) и smartfox (java, сервер).   -  person Mileseven    schedule 20.01.2014
comment
Есть игра под названием "Полубог". Когда он был выпущен, потребовалось несколько месяцев, чтобы довести его до играбельного состояния, где большинство проблем было в сетевой области. Это произошло потому, что, хотя они провели много тестов, когда все больше игроков начали использовать его, все пошло наперекосяк. Желаю вам удачи, я знаю, что вам будет очень весело!   -  person Andrew Savinykh    schedule 20.01.2014
comment
Имейте большую пропускную способность на своем сервере и/или оптимизируйте то, что вы отправляете, и/или пусть клиенты также имеют логику и просто отправляют действия игрока.   -  person Bernhard Barker    schedule 20.01.2014


Ответы (2)


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

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

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

Если башня стреляет пулей каждые 5 секунд и наносит 40 урона за пулю, вы просто рассчитываете на сервере, воздействуя на урон 8 в секунду для каждой цели, стоящей в «области урона» или «круге урона».

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

А вот на сервере делайте все по мелочи, заходя в зоны повреждения и получая урон в секунду. (Извините за плохой английский)

person aaron_bs    schedule 08.03.2014

Из-за защиты от читерства сервер должен иметь логику.

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

person Community    schedule 20.01.2014
comment
Спасибо за ответ, а как насчет задержки между сервером и клиентами? Например, сервер считает, что все юниты мертвы, а клиент — нет. Также другие клиенты должны знать, когда юниты поражены. Как я могу решить эту конкретную проблему? - person Mileseven; 20.01.2014
comment
При соответствующей синхронизации между симуляциями на стороне клиента и на стороне сервера этого не должно происходить. - person ; 20.01.2014
comment
Спасибо, это все, что мне нужно знать :) - person Mileseven; 20.01.2014