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

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

6 голосов
/ 24 сентября 2010

Я ищу сетевые проекты и хитрости, специфичные для игр. Я знаю о нескольких проблемах, и у меня есть некоторые частичные решения некоторых из них, но могут быть проблемы, которых я пока не вижу. Я думаю, что нет однозначного ответа на это, но я приму ответ, который мне действительно нравится. Я могу думать о 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 ]

2 голосов
/ 24 сентября 2010

Плохая сеть

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

Обман: прицелы и тому подобное

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

Обман: доступ к информации

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

В некоторых играх криптография может предотвратить мошенничество. Карточные игры, такие как покер, где каждый игрок получает возможность «перетасовать колоду». Подробности в википедии: Mental Poker .

С помощью RTS или FPS вы теоретически можете зашифровать свою часть состояния игры. Затем отправьте его всем и отправляйте ключи дешифрования только для тех частей, которые им разрешено видеть, или когда им разрешено это видеть. Однако я сомневаюсь, что в 2010 году мы сможем сделать это в режиме реального времени.

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

Если вы не используете покерный сайт, обман в любом случае не станет вашей самой большой проблемой.

2 голосов
/ 24 сентября 2010

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

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

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

Сервер вообще не должен догадываться - он знает состояние. Клиенту нужно только угадать, когда соединение не работает - когда оно восстановится, ему будет отправлено новое состояние.

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

Нет "лучшего пути". Однако географическое разделение работает довольно хорошо.

Можете ли вы избежать отправки всего через сервер?

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

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

Многие игры RTS поддерживают полное состояние одновременно на всех машинах.

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

Для большинства игр, открытых для публики, требуется 100% мошенничество.

2 голосов
/ 24 сентября 2010

Мышление криптографией решит проблему такого рода - очень распространенная и очень плохая ошибка: конечно, сам клиент должен иметь возможность дешифровать ее, так что это совершенно бессмысленно. Вы не добавляете безопасность, вы просто добавляете неизвестность (и что будет взломано).

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

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

1 голос
/ 30 августа 2014

Поскольку многие люди получают доступ к играм на мобильных устройствах, «плохая сеть» может возникать, когда игрок находится в зоне плохого приема или подключен к медленному Wi-Fi-соединению. Так что это не просто проблема людей, соединяющихся в малонаселенных районах. С мобильными клиентами «плохие сети» могут возникать очень-очень часто, и это обычно ЧРЕЗВЫЧАЙНО трудно диагностировать.

UDP приводит к потере пакетов, но даже в играх, использующих протоколы TCP и HTTP, могут возникнуть проблемы, когда связь между клиентом и сервером замедляется до сканирования, а пакеты проверяются на отправку. При связи UDP компенсация за потерю пакетов ОБЫЧНО зависит от того, что пакеты содержат. Если вы говорите о данных движения, обычно, если пакеты не получены, сервер интерполирует предыдущую траекторию и выполняет изменение позиции. Обычно в игре принято, как это обрабатывается, поэтому люди часто избегают UDP, если этого не требует их тип игры. Часто, чтобы справиться с высокой задержкой в ​​сети, игры с проблемами автоматически снижают количество функций, доступных пользователям, так что они все еще могут взаимодействовать с игрой, не вызывая при этом удара пользователя или слишком большого количества сломанных функций.

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

Игроки покидают Большинство игр в наши дни имеют выделенные серверы, поэтому эта проблема в основном спорная. Однако иногда да, сервер может быть изменен на другого клиента.

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

...