Как быстро отправить информацию, как во многих играх? - PullRequest
3 голосов
/ 26 февраля 2010

Я думаю, как методы игры, такие как Counter Sstrike, WoW и т. Д. В CS у вас часто всего 50 пингов, есть ли способ отправить информацию в онлайн базу данных MySQL с такой скоростью?

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

Неужели должен быть более простой и быстрый способ сделать это? Я слышал о TCP / IP, это то, что я должен использовать здесь? Возможно ли для него подключиться к базе данных быстрее, чем косвенно через скрипт PHP?

Ответы [ 3 ]

3 голосов
/ 26 февраля 2010

Клиент-сервер для вещей, критичных к задержке? Используйте неблокирующий UDP.

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

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

И я не думаю, что в какой-либо высокопроизводительной игре каждый вызов решается на вызов в базу данных. Чаще всего (если база данных даже используется) время от времени сохраняют данные или при важных событиях.

Вы не собираетесь реализовывать Counterstrike или что-то подобное в верхней части http.

3 голосов
/ 26 февраля 2010

TCP / IP состоит из трех протоколов:

  1. TCP
  2. UDP
  3. ICMP

ICMP - это то, что вы используете при пинге другого компьютера в сети.

Играм, таким как CounterStrike, плевать на то, что вы делали ранее. Поэтому нет необходимости в полноте, чтобы иметь возможность восстановить то, что вы сделали (именно поэтому конкуренты должны записывать на пленку то, что они делают). Это то, для чего используется UDP - нет гарантии, что данные будут доставлены или получены. Вот почему отставание может быть такой проблемой - вы уже мертвы, вы просто не знали об этом.

TCP гарантирует, что данные отправлены и получены. Медленнее, чем UDP.

Существует множество вещей, о которых нужно знать, чтобы иметь быстрое соединение - меньше хмеля и т. Д.

2 голосов
/ 26 февраля 2010

В большинстве игр, подобных тем, которые вы цитируете, для этого используется UDP (один из набора протоколов TCP / IP.) Для этого приложения UDP выбирается вместо TCP, поскольку он имеет меньший вес, что обеспечивает лучшую производительность, а функции надежности TCP не нужны .

Имейте в виду, что эти игры имеют автономные клиенты и серверы, обычно написанные на C или C ++. Если ваше приложение основано на браузере и вы пытаетесь сделать это через HTTP, используйте долгоживущее соединение и максимально обрезайте заголовки, включая файлы cookie. Рамка Tornado может вас заинтересовать. Вы также можете захотеть взглянуть на HTML5 WebSockets , однако широко распространенная поддержка еще далека.

Если вы нацелены на плагин для браузера, такой как Flash, Java, SilverLight, то вы можете использовать UDP, но я не знаю достаточно об этих платформах для подтверждения.

Edit:

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

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