Ignorance
https://github.com/SoftwareGuy/Ignorance
Что такое Ignorance?
Ignorance это надежный UDP транспортный уровень, использующий собственную сеть ENET C Networking library как custom fork of ENet-CSharp обеспечивающий надежный и ненадежный последовательный UDP-транспорт для 64-разрядных настольных операционных систем (Windows, Mac OS and Linux) and Mobile OSes (Apple iOS and Android). Он поддерживает 255 каналов и 4096 клиентов подключенных в одно время.
ENET - это надежная сетевая библиотека UDP C++, которая является зрелой и стабильной. LLAPI Unity нуждался в замене. Ignorance был разработан с учетом этой цели - заполнить пробелы и обеспечить надежную и производительную передачу UDP для Mirror.
Почему Ignorance вместо Unity LLAPI?
Старый LLAPI Unity был ужасно неэффективен, и множество тестов показали, что вы получите снижение производительности, используя Unity LLAPI в своем проекте. Это связано с архитектурой старого сетевого кода - технология Unity принимала решения "по архитектуре" и допускала некачественные исправления ошибок, которые другие разработчики воспринимали как пластырь на зияющую рану. Они не заботились о производительности или исправлениях ошибок.
Unity LLAPI также был с закрытым исходным кодом, что означало, что разработчики Mirror не могли взяться за дело и сделать его лучше.
Кто разработчики Ignorance?
Coburn является ведущим разработчиком транспорта. Oiran Studio активно использует этот транспорт для сетевых игровых проектов. В настоящее время он также используется некоторыми игровыми проектами, которые вы можете найти на сервере Discord по Mirror.
Почему я должен использовать надежный UDP вместо TCP?
если у вас есть связь в режиме реального времени, вам нужна скорость, а не надежность (VoIP...)
если вам нужны каналы
если вам нужны пользовательские типы отправки по каналам
если вам нужен канал передачи данных для вашей игры (a first person shooter, racing game, etc)
Почему я не должен использовать UDP вместо TCP?
если у вас есть критически важные вещи (если вам НУЖНО чтобы данные отправлялись точно из точки А в точку Б, без исключений)
если вам нужен полностью надежный сетевой протокол
если у вас паранойя
если вы создаете игру, похожую на Minecraft, и вам нужно, чтобы все были синхронизированы
Я хочу узнать больше о надежном UDP...
Требуется небольшое объяснение. UDP лучше всего описать как протокол передачи данных "shattershot", который означает, что вы просто распыляете пакеты и молитесь, чтобы они достигли места назначения, и надеетесь на лучшее. Удаленный адресат может получать, а может и не получать эти пакеты, и они не будут в порядке. Например, если у вас есть поток пакетов, который выглядит как:
...тогда это может прийти в не лучшем виде из-за того, что пакеты поступают не по порядку. Точка в следующем примере означает, что пакет пропал без вести.
Например, предположим, что вы потеряли пакет, содержащий обновление о состоянии здоровья игрока. Все остальные могут знать, что они получили 69 единиц урона, но у этого клиента все равно будет прежнее значение, скажем, 72 единицы здоровья. Без надежного UDP вы можете очень быстро выйти из синхронизации. Когда вы потеряете синхронизацию, игра закончится - все начнет работать очень странно.
Последовательность и надежная доставка
Последовательность
Надежный режим просто сообщает СЕТИ отправить это сообщение, ожидая, пока пульт подтвердит прием пакета, прежде чем заявить, что он был "потерян". ENET по-прежнему будет классифицировать указанные пакеты как потерянные, если не получит ответа от удаленного устройства, но будет повторно передавать их, чтобы компенсировать соединения с потерями или ситуации с высокой задержкой. Надежный режим пытается эмулировать некоторую повторную отправку TCP, если она не подтверждена вовремя, но поскольку UDP не обладает всеми служебными данными, которые есть у протокола TCP, это добавляет некоторую служебную информацию о пакетах.
По умолчанию Ignorance поставляется с двумя каналами как в надежном, так и в ненадежном режиме. Существуют и другие режимы канала, которые разработчики могут протестировать, поскольку разные из них могут подходить для разных нагрузок, но обычному человеку не нужно беспокоиться об этом. Ignorance приходит с разумными настройками по умолчанию из коробки.
Поддерживает ли Ignorance Websockets?
Нет, не поддерживает. Mirror поставляется со встроенной поддержкой websockets.
Где я могу найти Ignorance?
Возьмите Ignorance со странички релизов в репозитории на Github. Просто импортируйте UnityPackage из загруженного вами выпуска.
Где я могу поддержку Ignorance?
Вы можете обратиться в службу поддержки, открыв заявку на Ignorance repository issue tracker или в канале #ignorance в Mirror Discord сервере.
Я до сих пор не понимаю, что это за транспорт, у меня голова идет кругом, помогите!
Заходите в Discord, и мы сделаем все возможное, чтобы объяснить это простым английским языком.
Last updated