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

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

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

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

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

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

Ответы

Ответ 2

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

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

Ответ 3

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

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

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