TCP и UDP протоколы используются для передачи информации по интернету - по сути, это два основных протокола, которые используются по всему интернету: TCP был разработан в 1970 году, пока UDP был готов уже в 1980 году. Однако, важно отметить некоторые важные отличия TCP и UDP соединений:
- TCP обладает встроенной надежностью, гарантирующей правильную передачу данных из пункта А в пункт В с более высокой задержкой.
- UDP имеет меньшую задержку при передаче данных, но данный протокол ненадежен по своей природе и не дает никаких гарантий, что данные будут отправлены из пункта А в пункт В корректно.
Как уже говорилось ранее, TCP является самым популярным протоколом в Интернете. Протокол TCP используется для HTTP, SSH, FTP и многих других приложений. Основные функции TCP облегчают программистам работу с протоколом, поскольку программист сможет гарантировать, что данные будут отправлены из пункта А в пункт В корректно. Однако, хотя это звучит заманчиво, это может привести к увеличению задержки, когда соединения работают со сбоями или испытывают сильную задержку.
В игровой среде протокол TCP лучше подходит для игр с более медленным темпом, где задержка не важна, но игровые данные важны.
- Надежность: Приложениям не нужно беспокоиться о пропущенных пакетах. Если пакет будет потерян, TCP отправит его повторно. Все данные либо передаются успешно, либо вы получаете сообщение об ошибке и соединение закрывается.
- Упорядоченность: TCP гарантирует, что каждое сообщение поступит в том же порядке, в каком оно было отправлено. Если вы отправите "a", затем "b", вы получите "a", затем "b" и на другой стороне.
- Ориентированность на подключение: В протоколе TCP есть концепция соединения. Соединение будет оставаться открытым до тех пор, пока клиент или сервер не решат закрыть его. И клиент, и сервер получают уведомление о завершении соединения.
- Контроль загрузки: Если сервер перегружен, TCP ограничит передачу данных, чтобы избежать коллапса из-за перегрузки.
UDP используется для приложений реального времени, таких как быстро развивающиеся экшн-игры или передача голоса по IP (VoIP), где низкая задержка важнее надежности. Примерами приложений являются Skype, Discord, Zoom и многие другие.
В игровой среде мощь UDP может быть использована для обеспечения большего контроля над отправкой данных, что позволяет быстрее отправлять некритичные данные. Это, в свою очередь, делает UDP более удобным для быстро развивающихся игр, где важна задержка между сервером и клиентом, и если несколько пакетов потеряно, игра может восстановиться.
- Маленькая задержка: UDP работает быстрее, потому что ему не нужно ждать подтверждения пакетов удаленной стороной. Вместо этого он может отправлять и продолжать отправлять новые пакеты данных один за другим. Он также известен как протокол "scattershot", поскольку он просто отправляет данные клиентам без каких-либо гарантий того, что они действительно получат эти данные.
- Поддержка каналов: Каналы допускают различные типы доставки. В зависимости от реализации, один канал может использоваться для передачи критически важных данных, которые необходимо доставить по назначению, в то время как другой канал может использоваться для передачи данных "отправить и забыть" без какой-либо надежности.
- Различные типы пакетов: В зависимости от реализации поверх протокола UDP некоторые транспортные средства предлагают различные методы отправки пакетов, такие как Надежный упорядоченный, надежный неупорядоченный, ненадежный и другие, в зависимости от реализации. Надежная передача UDP зависит от реализации, но обычно она моделируется по образцу системы надежности TCP.
Зеркало не зависит от транспорта, его можно просто добавить в ваш игровой объект NetworkManager. Mirror поставляется вместе с KCP транспортом (все платформы кроме WebGL) и Websocket (WebGL) транспортом по умолчанию. Смотрите раздел Транспорты для получения большей информации о транспортах.
Выберите тот транспорт, который лучше всего подходит для вас и вашей игры. Мы рекомендуем вам создать профиль сети вашей игры и собрать реальные цифры, прежде чем принимать окончательное решение.