Проблемы с сетью в играх

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

Плохая сеть

Сообщения, отправленные клиентами, достигают сервера через некоторое время. Сервер может ' просто обработать их FCFS, потому что это несправедливо по отношению к игрокам с более высокой задержкой. Частичным решением для этого могут быть временные метки в сообщениях, но для этого вам понадобятся 2 вещи:

  • Уметь доверять часам клиентов. (Я думаю, это невозможно.)
  • Постоянные задержки, которые можно измерить. Что вы можете сделать с переменной задержкой?

Многие игры используют UDP, что означает, что сообщения могут быть потеряны. В этом случае они пытаются оценить состояние игры на основе уже имеющейся информации. Как узнать, правильное ли оценочное состояние после того, как соединение снова заработает?

В играх MMO сервер обрабатывает большое количество клиентов. Как лучше всего распределять нагрузку? На основании местоположения в игре? Привязывать группы клиентов к серверам? Можете ли вы избежать отправки всего через сервер?

Игроки уходят

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

Доступ к информации

Следующая проблема может быть решена с помощью выделенного сервера, но мне любопытно, можно ли это сделать без него. Во многих играх игроки не должны знать полного состояния игры. Туман войны в RTS и стены в FPS - хорошие примеры. Тем не мение, им нужно знать, действительно ли действие. (Например, вы можете выстрелить в меня оттуда или находитесь на другой стороне карты.) В этом случае клиентам необходимо подтвердить изменения в неизвестном состоянии. Это похоже на то, что можно решить с помощью умного использования криптографических примитивов. Есть идеи?

Мошенничество

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

Я прочитал эти вопросы и некоторые ответы https://stackoverflow.com/questions/901592 / best-game-network-programming-articles-and-books , но в других ответах есть ссылки на недоступный / ограниченный контент. Это вопрос, не зависящий от платформы / ОС, но также приветствуются решения для конкретных платформ / ОС.

6
задан Community 23 May 2017 в 12:04
поделиться