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

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 17 мая 2010

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

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

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

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

3 голосов
/ 23 мая 2010

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

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

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

...