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

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

Плохая сеть

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

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

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

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

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

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

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

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

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

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос