Сочетание TCP и UDP

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

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

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

Таким образом, вместо реализации TCP-подобных функций поверх UDP (с буферами данных, маркировкой пакетов номерами для определения их порядка, системами подтверждения пакетов), что потребовало бы тонны работы для обеспечения правильной работы и эффективно, я хотел бы просто использовать TCP и UDP одновременно.

Тем не менее, я слышал, что TCP и UDP могут бороться друг с другом за полосу пропускания, если вы используете их вместе в одно и то же время, а использование TCP увеличивает скорость отбрасывания пакетов UDP. Это правда? Есть ли какие-либо другие проблемы, с которыми мне придется иметь дело при смешивании этих двух протоколов?

8
задан newprogrammer 3 April 2012 в 19:59
поделиться