Как клиенты онлайн-игр могут так быстро обмениваться данными через интернет?

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

на каждом шаге клиент игры должен отправлять координаты игрока на сервер и принимать текущие координаты другого клиента. Как можно сделать этот обмен так быстро (как это делают все современные игры).

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

Итак, вопросы...

  1. какой протокол обычно используют игровые клиенты для обмена информацией с сервером?
  2. какие серверные технологии подходят для решения этой проблемы?
  3. какие алгоритмы применяются для борьбы с задержками во время игры и т. д.

3 ответов


обычно с сетевой интерполяцией и предсказанием. Gamedev-хороший ресурс:http://www.gamedev.net/reference/list.asp?categoryid=30

также проверьте это:http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking


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

подсказка: предсказание используется в любом случае, чтобы сгладить быстрое обновление экрана (~60fps), так как фактическая скорость игры обычно медленнее (~25fps).


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

  • нет или мало "данных", которые должен чтобы ускорить процесс. Самый быстрый онлайн игры (например. шутеры от первого лица ) как правило, не сохраняют ничего диск во время матча. Медленнее онлайн игры, такие как MMOs, могут использовать база данных, прежде всего для хранения информация об игроке, но для большинства часть они держат их игрок и данные по Мира в памяти, не на диске.
  • Они не используют web-сервер. HTTP относительно медленный протокол, и даже TCP самостоятельно может быть слишком медленно для некоторых игр. Вместо этого они есть на заказ серверы, которые написаны только для этой конкретной игры. Часто эти серверы настроены на низкую задержку, а не пропускную способность, потому что они обычно не обслуживают большие документы, как веб-сервер, но много крошечных сообщений (например. измеряется в байтах, а не килобайты.)

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