Просто любопытно, что входит в решение между использованием UDP и TCP при создании онлайн-игры - PullRequest
0 голосов
/ 10 апреля 2011

Как видно из названия, мне было интересно, как решить, какой протокол реализовать. До сих пор я понимаю, что UDP может обеспечить более быструю передачу данных, но в том порядке, в котором он отправляется, он игнорируется и не отслеживает, получены ли данные. Насколько мне известно, TCP безопаснее и используется, когда данные должны быть точными, а время приема не должно быть таким быстрым. Но я заметил, что разные онлайн-игры используют разные протоколы, хотя все они играют довольно быстро (что, я полагаю, означает быструю передачу данных). Поэтому мне интересно, как вы можете определить, какой и какой протокол используется?

Спасибо

Ответы [ 3 ]

1 голос
/ 10 апреля 2011

Предупреждение: входящее упрощение. Тем не менее, это должно помочь вам понять.

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

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

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

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

0 голосов
/ 21 августа 2012

Не думайте, что это «UDP быстрее» и «TCP медленнее», потому что это просто неправильно.Большая разница в том, что плохие пакеты просто отбрасываются в UDP.Реализация получателя UDP не должна будет ждать повторной передачи и приема отброшенного пакета, прежде чем доставлять любые последующие в приложение .

В TCP, даже если на вашей машине установлен следующийПакет после отброшенного в буфере, он не сможет доставить его приложению, пока отправитель повторно не отправит тот, который был отброшен.

TCP: доставить данные в приложение по порядку, автоматическая повторная передача UDP:доставлять данные в приложение в любом порядке, без повторной передачи

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

0 голосов
/ 10 апреля 2011

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

Решение «UDP против TCP», вероятно, будет (я говорю, вероятно, поскольку я не профессиональный разработчик игр, просто разработчик хобби) сводится кобъем трафика, который вы ожидаете отправить / получить, условия сети, долговечность программы в случае потери пакетов и ожидаемое количество одновременных пользователей.

Пошаговая стратегическая игра, например, шахматы, вкоторый каждый игрок не должен отправлять намного больше, чем его ходы и случайные сообщения чата, выиграет от TCP.Шутер от первого лица с десятками игроков в 3D может генерировать большой трафик в течение длительного времени, но может не пострадать, если теряются несколько пакетов, что делает его идеальным кандидатом для UDP.

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

...