UDP является потерями ненадежный протокол, который работает поверх протокола IP. В отличие от TCP (который обрабатывает все аспекты надежной связи) до уровня приложения обрабатывается упакованные пакеты и другие аспекты «надежного» транспортного протокола. Таким образом, вполне вероятно, что любая реализация, требующая надежности в той же степени, что и TCP, будет иметь дополнительные накладные расходы.
Вы можете выделить два порта port A
и port B
. Каждый порт является однонаправленным, если отсутствует упавший пакет.
client 1 = port A = server 2
server 1 = port B = client 2
Это держит вещи простыми. Сервер просто отправляет данные и периодически слушает, но получает сообщения только в том случае, если клиент передает сигнал.
Клиент - это отрицание. Он принимает сигналы и отправляет только в случае отсутствия пакета. Альтернативной реализацией будет та, в которой пара клиент/сервер может разговаривать друг с другом, делая порт действительно однонаправленным.
Мы получаем надежность сообщений на обоих портах, используя два индекса пакета.
client index 1 = server index 2
server index 1 = client index 2
Индекс для каждого из них один байт и увеличивается клиентами при отправке нового сообщения. Доставка сообщений принимается до получения специального сообщения, которое будет UDP-сообщением для упавшего пакета. Это могло бы заглушить сигнал для сброшенного сообщения, вероятно, в его самом значительном или наименее значимом бите/байте в зависимости от консистенции дизайна, а также от индекса сообщения. Кажется, что очередь тоже нужна, но я еще не детализировал ее.
Tcp - надежный протокол, то есть протокол является надежным и абстрагируется от уровня приложения, который инкапсулирован. Udp не является и поэтому сначала применяет некоторые заказы к пакетам или сеансу (нет такой вещи, как сеанс в udp, вы должны создать это на прикладном уровне), чтобы можно было собрать неработающие пакеты и обнаружить упавшие пакеты и их обижают. В основном все вещи, которые Tcp делает для вас эффективно и аккуратно отвлеченными от вас, вам нужно сделать. Я бы сказал, почему не просто использовать Tcp? Похоже на плохое использование существующих технологий. –
Также считают, что Google сделала свою собственную версию Udp под названием Quick, которая, как я думаю, предназначена для более высокой производительности для tcp, хотя я не уверен в специфике Quick, так как это не интернет-стандарт, как tcp и udp. Но если это сделано google, вероятно, для него есть/некоторые пакеты nodejs. –
Является ли это Oracle Java или javascript? Я предполагаю, что Oracle Java на данный момент. –