Есть ли проблемы с использованием TCP и UDP в одном приложении? - PullRequest
5 голосов
/ 08 апреля 2011

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

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

Итак, было бы разумно сначала использовать TCP для управления соединением, а затем через отдельный порт отправить пакет передачи данных и далее?

Ответы [ 3 ]

5 голосов
/ 08 апреля 2011

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

2 голосов
/ 08 апреля 2011

Это вполне разумно и уже используется в мейнстриме. Даже при просмотре веб-страниц операции DNS основаны на UDP, а соединения HTTP - на TCP.

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

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

Это не только принято, но и широко используется.В качестве хорошего примера BATS Exchange использует этот подход в своей системе распространения рыночных данных для реализации механизмов восстановления.

...