Это вопрос, который я вижу много. Большинство людей говорят, что UDP всегда лучше для игр в реальном времени, чем TCP. Насколько я понимаю, TCP пытается пересылать пакеты снова и снова, пока другая сторона не получит их, тогда как UDP не заботится.
Большинство вещей, которые я прочитал, заключается в том, что UDP необходим для любой игры в реальном времени, а TCP ужасен. Но дело в том, что большинство людей в любом случае, похоже, реализуют какую-то форму TCP поверх UDP. И я также слышал, что разница между ними незначительна, учитывая, что мы больше не находимся в 80-х годах, и интернет теперь довольно быстрый и надежный.
Мое общее понимание здесь неверно? Может кто-нибудь прояснить это для меня?
game-development
networking
tcp
flooblebit
источник
источник
internet is now pretty fast and reliable
Нет, это не так. Пропускная способность резко возросла, да, но задержка еще довольно высока. При использовании чистого TCP вам нужно, чтобы время на сервере превышало максимально возможную задержку, если вы не выполняете рассылку пакетов - что лучше всего делать на клиенте через UDP. Проблема в том, что некоторая информация в игре должна быть надежной, а другая - быстрой. Для этого предусмотрены пользовательские протоколы поверх UDP, а также множество фирменных протоколов, которые дают вам все необходимое в красивой упаковке.t0
, которое никогда не принимается, то вы отправляете новое состояние мира за разt1
, вам не нужно ждать, пока клиент фактически получит первый пакет, который уже устарел.Ответы:
Зависит от того, говорите ли вы об одноранговой связи, клиент / сервер с пользователями, на которых работает сервер, или клиент / сервер с центром обработки данных, на котором работает сервер. Только в последнем случае Интернет действительно быстрый и надежный. Компьютеры ваших пользователей не гарантируют высокую скорость и, конечно, не будут надежными.
UDP позволяет вам лучше контролировать реализацию, подобную TCP. Это дает вам большую гибкость, чтобы выполнять пакеты не по порядку, отбрасывать пакеты, которые вы считаете ненужными, и повторять пакеты, которые вы считаете важными, такого рода вещи. Но это следует делать только в случае необходимости и при наличии необходимого опыта.
Если вы можете обойтись без этой гибкости, TCP работает достаточно хорошо и экономит вам много времени. Даже профессиональные студии (вроде той, в которой я работал) используют TCP, если им абсолютно не нужен UDP, и у них есть люди, посвященные сетевому программированию.
источник
Было бы предположение сказать «Интернет теперь довольно быстрый и надежный», как отметил @Ordous, и тоже опасный.
Причина, по которой настраиваемый протокол UDP + для пакетов, критичных для доставки, работает в большинстве игр, заключается в том, что бывают случаи, когда все может быть в порядке, если вы потеряете какой-либо пакет (например, для вторичных некритических событий для завершения игры). Иногда бывают случаи, когда «совсем не хорошо» потерять некоторые данные, например, для перемещения курсора и т. д. (я не занимаюсь разработкой игр для жизни, поэтому извините за расплывчатые примеры)
По умолчанию UDP не тратит время на их повторение.
И, кстати, во многих играх пакеты «нормально терять иногда» больше, чем «всегда нужно доставлять без сбоев». Следовательно, естественным образом подходит для этой задачи.
Все, что было необходимо для UDP, - это использовать собственный протокол, который просто помогает правильно доставлять пакеты «всегда нужно доставлять без сбоев», оставляя оставшиеся игровые данные на милость сетевого подключения.
Теперь решение о том, какой трафик составляет большую часть ВАШИХ данных для передачи, поможет вам решить лучше.
Смысл против TCP заключается в том, что время, потраченное на повторные попытки, может быть потрачено на отправку пакетов, которые имеют значение СЕЙЧАС.
Существует также вероятность того, что если во время передачи возникнут какие-либо проблемы, TCP может привести к более сложному сценарию игрового процесса для пользователя, что испортит его опыт по сравнению с UDP + Custom Stack (эта последняя часть просто предчувствие). это другим экспертам здесь, чтобы прокомментировать это. Хотелось бы узнать о возможностях этого сценария).
источник