Выберите Протокол для вашего приложения связь,Есть много разных вариантов. существуют В этой статье,мы будемучитьсячетыре видапоток ХОРОШОизрешение:HTTP、WebSocket、gRPCиWebRTC。мы будемпроходить Расследовать этоизтехнология、Изучите лучшие варианты использования каждого протокола, его плюсы и минусы.
Способ нашего общения постоянно совершенствуется: становится быстрее, удобнее и надежнее. Наши средства связи прошли путь от использования почтовых голубей для отправки сообщений до почтовой почты, до изобретения стационарного телефона и отправки электронных писем и текстовых сообщений с небольших устройств, которые помещаются в наши карманы.
В будущем мы, возможно, даже перенесем встречи и дни рождения в виртуальную реальность (будем надеяться, что это всего лишь шутка!). Но лучший способ общения всегда зависит от ситуации.
Быстрое текстовое сообщение иногда лучше длинного электронного письма. В других случаях видеозвонок с вашей командой — лучший способ передать информацию. Напротив, важные страховые документы должны быть отправлены обычной почтой и доставлены в бумажном виде.
То же самое касается сетевых технологий и протоколов, которые мы используем. Разные приложения имеют разные потребности в общении.
существоватьв этой статье,мы будемпредставлятьодиндоступен разработчикамиспользоватьизпоток ХОРОШОПротокол связи,И изучить плюсы и минусы разных вариантов. Не существует лучшего альтернативного решения — есть лишь некоторые решения, которые лучше подходят для конкретной проблемы приложения.
Некоторым приложениям требуются соединения «точка-точка» с низкой задержкой и высокой скоростью передачи данных, при этом допустима некоторая потеря пакетов (информации). Другие приложения могут опрашивать сервер по мере необходимости, не получая сообщений от разных узлов. Другие приложения требуют связи в реальном времени с надежностью данных.
существовать Проволока Мультиплеер、заявка на доставку информации、блог-сайт、Приложение медиабиблиотекиипрограммное обеспечение для видеоконференцийЕсть разные уровниизкоммуникацияитребования к данным。
В компьютерных сетях протокол — это набор правил, управляющих обменом данными между устройствами. Протокол определяет правила, синтаксис, семантику и синхронизацию связи, а также возможные методы устранения ошибок.
Протоколы, обсуждаемые в этой статье, определяют, как программное обеспечение прикладного уровня взаимодействует друг с другом. Разные протоколы следуют разным правилам, поэтому важно понимать преимущества и ограничения каждого протокола. В этой статье вы узнаете о следующих протоколах:
HTTP(протокол передачи гипертекста)дараспределенный、Совместная работа и гипермедийная информационная система на основе протокола приложений. HTTP Это основа передачи данных во Всемирной паутине. Гипертекст — это структурированный текст, в котором используются логические связи (гиперссылки) между узлами, содержащими текст. HTTP Это протокол для обмена или передачи гипертекста.
HTTP/2цельсуществоватьрешить оригинал HTTP недостатки протокола и улучшить производительность. HTTP/2 Сравнивать HTTP/1.1 Он быстрее и эффективнее и поддерживает мультиплексирование, позволяя мультиплексировать несколько запросов и ответов в одном соединении. Другие примечательные функции включают сжатие заголовка и отправку данных на сервер. Постепенно он становится протоколом по умолчанию для сетевого трафика.
WebSocketда Способ позволить клиентамимежду серверами Входить ХОРОШОдвустороннийкоммуникацияизпротокол。этодаиметь дело св реальном времядатаизприложениепопулярный выбор, например приложение для чат-программа, чат реальном времениданныепоток。
gRPCдаодиниспользовать HTTP/2 Современная платформа RPC с открытым исходным кодом для транспорта. Для тех, кому нужно делать много маленьких и быстрых API Для вызова приложений это хороший выбор. gRPC Создавайте кросс-платформенные привязки клиента и сервера для нескольких языков, позволяя клиентским приложениям напрямую вызывать методы серверных приложений на разных машинах, как если бы это был локальный объект.
WebRTCда Способ позволить клиентам之间Входить ХОРОШОв реальном время связи и позволяет Учреждать непосредственно верные и другие технологии подключения. Он используется для видео, чата, обмена файлами ив. реальном Приложение «Время видеопотока».
Прежде чем углубляться в вышеупомянутые уровни приложений, важно иметь базовое представление о TCP и UDP, двух базовых транспортных уровнях, которые облегчают передачу данных принципиально разными способами.
**TCP (протокол управления передачей)** — это стандарт, определяющий, как устанавливаются и поддерживаются сетевые соединения через Интернет. TCP — наиболее часто используемый протокол в Интернете и любой сети, ориентированной на соединение. Когда вы просматриваете Интернет, ваш компьютер отправляет TCP-пакеты на веб-сервер. Веб-сервер отвечает, отправляя TCP-пакеты обратно на ваш компьютер. Прежде чем обмениваться данными, между двумя устройствами сначала устанавливается соединение, и TCP использует коррекцию ошибок, чтобы гарантировать успешную доставку всех пакетов. Если пакет потерян или поврежден, TCP попытается отправить его повторно.
**UDP (протокол пользовательских дейтаграмм)** — это ненадежный протокол транспортного уровня без установления соединения. Он не требует установления или поддержания соединения, и нет никакой гарантии, что сообщения будут доставлены по порядку. Это означает, что некоторые данные могут быть потеряны, если пакет не отправлен или поврежден. UDP Обычно используется в потоке СМИ илив реальном времениприложение,существуют в этих приложениях,Проблема отброшенных пакетов. Сравнение гарантирует, что доставка будет меньше.
Важно иметь базовое понимание HTTP (протокола передачи гипертекста), основы всех интернет-коммуникаций и передачи данных на уровне приложений.
Прежде чем мы более подробно рассмотрим другие протоколы и полностью поймем возможности, которые они предлагают, также важно понять HTTP/1 и его ограничения.
Используя HTTP, клиенты и серверы взаимодействуют, обмениваясь отдельными сообщениями. Сообщение, отправленное клиентом, называется запросом, а сообщение, отправленное сервером, называется ответом. Эти сообщения отправляются через TCP-соединение как обычные текстовые сообщения. Их также можно зашифровать с помощью TLS и отправить по протоколу HTTPS.
Клиентом обычно является веб-браузер или приложение, работающее на телефоне или компьютере пользователя, но технически это может быть что угодно, например скрипт, сканирующий веб-сайт.
HTTP-запросы могут передаваться только в одном направлении — от клиента к серверу. Сервер не может инициировать связь с клиентом; он может только отвечать на запросы.
HTTP хорошо подходит для традиционных веб-приложений и клиентских приложений, где информация получается по запросу. Например, вы обновляете страницу и отправляете запрос на сервер для получения последней информации.
Однако соглашение расширилось так, как изначально не предполагалось. В следующих разделах мы рассмотрим некоторые ограничения HTTP/1.
HTTP/1 неэффективен, когда сообщения необходимо отправлять от клиента на сервер в режиме реального времени и наоборот. Например, если на сервере есть новая информация, которую необходимо передать клиенту, эта транзакция может произойти только после того, как клиент инициирует запрос.
Есть несколько обходных путей, используя что-то, называемое HTTP короткий опросидлинный опроси события, отправленные серверомизтехнология。
HTTP короткий опрос Метод, при котором клиент неоднократно отправляет запросы серверу, пока тот не ответит новыми данными. Как только он получит данные о прибытии,Он запустит процесс снова и спросит несколько раз.,Пока не появится что-то еще.
Это неэффективная стратегия связи в реальном времени, поскольку она тратит много ресурсов на непрерывную передачу и анализ HTTP-запросов/ответов.
использовать HTTP длинный опрос,Сделать одинокий запрос от клиента,Затем сервер оставляет это соединение открытым.,До тех пор, пока не появятся новые данные и можно будет отправить ответ. После получения клиентом ответа от приезжать,Немедленно снова Учреждать новые изоединять.
длинный опрос Сравниватькороткий опрос более эффективен, но не давний реальном время связи из Лучшее решение.
События, отправляемые сервером, позволяют клиентам поддерживать открытое соединение и получать обновления (push-сообщения) с сервера в режиме реального времени без необходимости постоянно опрашивать сервер на наличие новых данных. Это одностороннее соединение, поэтому вы не можете отправлять события от клиента на сервер.
SSE — это стандарт, описывающий, как сервер инициирует передачу данных клиенту после установления первоначального клиентского соединения.
Большинство потоков данных HTTP состоят из небольших пакетных передач данных, тогда как TCP оптимизирован для долгоживущих соединений и массовой передачи данных. В большинстве случаев время прохождения по сети является ограничивающим фактором пропускной способности и производительности TCP. Таким образом, задержка является узким местом производительности, которое может преодолеть большинство веб-приложений.
Вышеупомянутое означает HTTP использоватьиз TCP Создан для обработки долговременных соединений и передачи больших объемов данных. С другой стороны, HTTP/1 открою кучу эфемерного TCP соединение и обычно отправляет только небольшие фрагменты данных.
Одна из проблем с производительностью HTTP/1.0 заключается в том, что вам приходится открывать новое TCP-соединение для каждого запроса/ответа. Это не проблема для той цели, для которой изначально был придуман HTTP — получения гипертекстовых документов. Часть документации важна, поскольку HTTP не означает «гипермедиа».
По мере роста сети открывайте новую для каждого запроса. TCP Связь становится проблемой. Мы начали создавать полноценные приложения вместо простых веб-страниц, и объем медиафайлов и файлов, которые браузер должен был получить, стал намного больше. Представьте себе типичный Web Приложение требует HTML、CSS и JavaScript документ,А также различные изображения и другие ресурсы. верно для каждого файла,Все должны Учреждатьодинновыйизсоединять。
Одновременно появился HTTP/1.1 с постоянными соединениями, определявшими, что мы можем иметь несколько запросов или ответов на одно и то же TCP-соединение.
Это решение, безусловно, является улучшением, но оно не позволяет серверу отвечать на несколько ответов одновременно. Это протокол сериализации, в котором вам нужно отправить запрос и дождаться ответа, затем отправить второй запрос и так далее. Это называется блокировкой начала строки.
Однако добиться некоторого параллелизма возможно, поскольку браузер может открыть до шести TCP Соединение – где «источник» определяется как хост.ипортЧислоизуникальное сочетание。
Например, если у вас есть приложение фотогалереи, которому необходимо загрузить 12 изображений, будет сделано шесть запросов на загрузку первых шести изображений, и каждый запрос будет открывать новое TCP-соединение в фоновом режиме. Остальные шесть изображений будут заблокированы до тех пор, пока не будет получен ответ и не будет доступно одно из открытых соединений для загрузки следующего изображения. Первоначальные шесть открытых TCP-соединений одного и того же происхождения будут повторно использоваться по мере их появления, но вы ограничены шестью активными соединениями.
Естественно, программист нашел простое решение — изменить начало координат. Вместо размещения всех ресурсов в одном источнике шесть изображений размещаются в одном источнике, а остальные — в другом. Теперь вы можете иметь 12 одновременных запросов (или открыть TCP-соединение). Это называется «шардинг».
1.images.com
2.images.com
Да,Существует ограничение на количество раз, которое вы можете сделать это.,И сложно определить оптимальное количество осколков. существоватьиногда,Добавление большего количества осколков увеличивает сложность и накладные расходы.,и может вызвать перегрузку канала и потерю пакетов.
Есть и другие вопросы, потому что каждый TCP Соединения добавят ненужную нагрузку на сервер. Соединения каждый раз конкурируют друг с другом TCP и TLS Установление связи увеличивает ненужные затраты и требует дополнительных ресурсов сервера/прокси для поддержания активности. HTTP/1 использовать Первый этаж TCP Существует очевидное ограничение на способ подключения.
Другая проблема заключается в том, что с HTTP По мере развития спецификации в нее добавляются новые заголовки. Разработчики также могут выбрать cookie Добавил в шапку эти cookie Может быть настолько большим, насколько вам нравится. Это добавляет много расширений, потому что каждый запрос и ответ должен передавать всю эту текстовую информацию, и HTTP/1.1 Не содержит заголовков сжатия и механизмов метаданных.
Если вам нужен высокопроизводительный протокол RPC, эти издержки могут быстро возрасти, и HTTP перестанет быть лучшим решением.
существовать HTTP/1.1 , браузер «приоритизирует» ресурсы, удерживая приоритетную очередь на стороне клиента, и как максимально эффективно использовать доступные ресурсы. TCP-соединение позволяет делать обоснованные предположения. В браузер встроена эвристика, которая определяет, какие ресурсы Сравнивать более ценны, чем другие.
Например, загрузить CSS будет выравнивать загрузку изображений с более высоким приоритетом.
вопроссуществовать В,как разработчик,Вы не можете определить, что один запрос имеет более высокий приоритет, чем другой запрос, или изменить правильный приоритет существования информации. Какой контент загружается первым, зависит от браузера,Вы, конечно, не имеете права голоса в схеме приоритетов.
HTTP/2 — HTTP/1 HTTP/1 из Все вопросы производительности и существования были добавлены без изменения какой-либо семантики (глаголы, заголовки и т. д.) из падежа.
HTTP/2 серединабольшинство Существенноизизменятьдаиспользовать МультиплексированиепроходитьодинокийTCP-соединениетакой жечасотправлятьиполучить несколько HTTP Запрос и ответ. все HTTP/2 соединять Вседадлительныйиз,Для каждого источника требуется только одинсоединять. Это обеспечивает более эффективный доступ к сетевым ресурсам.,И может значительно улучшить производительность приложения.
Некоторые другие преимущества HTTP/2:
HTTP/2 серединаизбазовыйпротоколединицадарамка。этотдобрыйновыйиздвоичныйрамка Механизм изменения клиентаимежду серверамиизданныеобмен Способ。
Стандарт определяет десять различных типов кадров, каждый из которых служит своей цели. Например, ЗАГОЛОВКИ и DATA рамки представляют собой HTTP проситьиответиз База:
Кадр — это наименьшая единица связи**, которая передает данные определенного типа. **
Некоторые другие примеры фреймворков:
index.html
,Сервер можно создатьодин PUSH_PROMISE Приходитьобещатьтолкатьapp.js
иstyles.css
,Это означает, что клиенту не нужно запрашивать эти ресурсы.рамкакомбинациясуществоватьвместе образуютинформация,Например На картинке вышеизголоваиданныерамка。этотждатьтакой же Внормальныйизпроситьилиответ。
наконец,серияинформацияможет статьпотокизчасть。этотпозволятьклиентимежду серверамииздвустороннийданныепотоки полныйизпроситьиответ Мультиплексирование。
Картинка выше немного вводит в заблуждение,Создается впечатление, что клиент и сервер открыли несколько соединений. Но это даодинокий TCP-соединение обеспечивает свободный обмен данными между клиентами и серверами без блокировки.
Новый уровень двоичной структуры позволяет клиентам и серверам HTTP информацияразложен на независимыеизрамка,переплетать их,Затем существует другой конец, который собирает их заново.
Из спецификации HTTP/2:
“поток”дасуществовать HTTP/2 существовать обмен независимыми двунаправленными последовательностями кадров между клиентами и серверами. поток имеет несколько важных характеристик:
Существует много недопониманий относительно функциональности push-уведомлений сервера.,Это позволяет серверу заранее отправлять ресурсы, которые, по его мнению, могут вам понадобиться, через HTTP/2.,Например,и.js
документ.css
,без запроса клиента. Это не имеет ничего общего с двусторонним процессом.,Существует только один тип кэшируемых ресурсов согласно веб-технологиям.
Дело в том, что для HTTP/2,Сервер не может запуститьсяпоток。Даодин旦клиентпроходитьотправлятьпросить Открытьодинпоток,Обе стороны могут отправлять данные через постоянный сокет в любое время**рамка. **одинхорошийпримерgRPC, о котором мы поговорим позже.
использовать HTTP/2 допускает двунаправленный поток данных, вы можете утверждать, что он дает выравнивание. WebSockets Например, решение более оптимизировано, или вы можете возразить, что это не так. Мы будем существовать WebSocket разделе этот вопрос рассматривается более подробно.
Из спецификации протокола WebSocket:
Цель этой технологии — открыть несколько HTTP соединятьсервер для двусторонней связи на основе браузера из приложения предусмотрен механизм (например, использовать XMLHttpRequest или iframes идлинный опрос)。
WebSockets были изобретены для того, чтобы обеспечить полнодуплексную связь между клиентами и серверами, что позволяет мгновенно передавать данные в обоих направлениях через одинокий.
Учреждать WebSocket После подключения клиенту не нужно опрашивать сервер на наличие обновлений. Вместо этого общение происходит в обоих направлениях. и HTTP/1 изоригинальныйдлинный опросикороткий опросфаза С выравнивание, что увеличивает скорость iv реальном времениспособность。WebSocket Следующего формата нет. Вы можете отправлять любые данные, текст и байты — такая гибкость да WebSockets Одна из причин его популярности.
Некоторые из них могут звучать так, будто мы HTTP/2 HTTP/2 WebSockets. дасуществовать был изобретен задолго до HTTP/2. Позже мы сравним их подробнее.
WebSockets эффективно работают как транспортный уровень через TCP.
хотеть Учреждать WebSocket соединяться, клиент и сервер сначала должны пройти нормальное HTTP/1.1 Соединение выполняет рукопожатие. Это рукопожатие от HTTP приезжать WebSockets мост.
Ниже приведен пример запроса на подтверждение связи клиента. Клиенты могут обновить заголовки, называемые HTTP/1.1, механизм его подключения HTTP-переключатель для доступа к WebSockets:
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Затем сервер завершит рукопожатие специальным ответом, указывающим, что протокол будет изменен с HTTP на WebSocket:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
WebSockets нуждатьсяхотетьодинсws://
orwss://
планиз Единый идентификатор ресурса (URI)。schemews://
использовать Внезашифрованныйсоединять,wss://
scheme для зашифрованных соединений, аналогично HTTP URL изиспользовать Способhttp://
илиhttps://
scheme。
Как только будет установлен двусторонний канал связи,Затем клиент и сервер могут отправлять информацию туда и обратно. Эта информация может содержать что угодно: от двоичных данных до текстовых данных. Соединение WebSocket останется открытым,Прямо приехать клиент или сервер отключить соединение.
На момент написания статьи существовал WebSocket Протокол не поддерживает встроенное Мультиплексирование. Мы существуем HTTP/2 Частично обсуждено Мультиплексирование, мы учимся приезжать да HTTP/2 из имеет встроенные функции и может существовать Мультиплексирование нескольких потоков на одном и том же соединении. Каждый поток имеет один уникальный идентификатор, и все отправленные изображения имеют одну соответствующую ассоциацию потока. ID。
Нет поддержки средств мультиплексирования WebSocket Соглашение должно быть для каждого WebSocket соединять Учреждатьодинновыйиз Передачи соединения. Например, запуск нескольких клиентов в одном браузере на разных вкладках приведет к созданию отдельных браузеров. Хочу существовать WebSockets 上Входить ХОРОШОМультиплексирование,тыв целомнуждатьсяхотетькак разработчикосуществлятьили Полагайтесь на сторонние плагиныилибиблиотека.
Итак, HTTP/2 заменил WebSockets Уже? Самый простой ответ – нет. Более длинный ответ HTTP/2 Включает двунаправленную потоковую передачу, поэтому WebSockets Не единственный/лучший вариант. и WebSockets Взаимно Сравнивать,HTTP/2 Поскольку норма приносит больше пользы вам. Он имеет встроенную функцию мультиплексирования, существующую большую часть, которая приведет к открытию исходного сайта. TCP Меньше связей. С другой стороны, вебсокеты Предлагает отличныеизстепени свободы,И нет никаких ограничений на то, как Учреждатьсоединять могут передавать данные между клиентами и серверами. Но да,Вам необходимо самостоятельно управлять переустановкой (или полагаться на то, что библиотека сделает это за вас).
Какой из них в конечном итоге лучше, работает ли один, а другой нет — все это спорно, и эта статья не дает однозначных ответов. Вебсокеты Предлагает отличныеизгибкость,и в качестве установленного стандарта,Полностью поддерживается всеми современными браузерами.,Экосистема вокруг клиентских и серверных библиотек сильна.
Более подробное обсуждение эгоцентризма можно найти в следующих вопросах: Stack Overflow:
кромеодинRFCпозволятьсуществовать HTTP/2 Запуск в одном подключенном потоке WebSocket Механизм соглашения.
способен начать с HTTP/2 гид WebSockets Разрешить двум протоколам совместно использовать TCP подключитесь и будет HTTP/2 верносетьизболее эффективноиспользовать расширение приезжать WebSockets。
Это было реализовано в Chrome и Firefox. Вы можете прочитать документацию по дизайну Chrome здесь.
Веб-сокеты лучше всего подходят для приложений, которым требуется двусторонняя связь в реальном времени, а также для приложений, которым необходимо быстро передавать небольшие порции данных, например:
По совпадению, наша команда имеет опыт в этой области. У нас есть широкий ассортимент WebSockets приходи поддержать насизчати Упоминание о деятельностихотеть Базасредство。
верно WebSockets из хорошо поддерживается, уже давно поддерживается большинством приезжающих браузеров и клиентов, хорошо документирован и прост в использовании. Но да, не следует злоупотреблять WebSockets, в зависимости от ваших потребностей могут быть лучшие варианты.
Например, событие, отправленное сервером (SSE)существовать HTTP/2 Очень эффективен и прост в использовании. СШЭ Это не система двусторонней связи; сервер передает данные клиенту в одностороннем порядке. Но если вам нужно, чтобы сервер отправлял данные клиенту только в одном направлении, то это может увеличить корреляцию. WebSockets Лучший выбор за свою стоимость. когда HTTP/2 Когда недоступно, SSE Также вернусь к приезду HTTP/1.1. Кроме того, клиент (или браузер) управляет соединением за вас и поддерживает автоматическое повторное соединение.
если пройдет WebSockets, то изоединять отсутствует и не содержит механизма балансировки нагрузки или ресоединять. Это необходимо реализовать вручную или с помощью сторонней библиотеки.
gRPC — это современный высокопроизводительный удаленный вызов процедур с открытым исходным кодом. (RPC) рамка,Может работать в любой среде. Его можно поддерживать с помощью точной балансировки нагрузки, трассировки, проверки работоспособности, аутентификации и подключаемых устройств.,Эффективно предоставляйте услуги внутри центров обработки данных и между ними. Он также подходит для распределенных вычислений и последней мили.,Устройство, мобильное приложение и браузер взаимодействуютприезжать с серверной службой.
gRPC — это контрактная система RPC с открытым исходным кодом, первоначально разработанная Google. gRPC позволяет приложениям прозрачно взаимодействовать и упрощает создание связанных систем.
это Создавайте кросс-платформенные привязки клиента и сервера для нескольких языков, позволяя клиентским приложениям напрямую вызывать методы серверных приложений на разных машинах, как если бы это был локальный объект.
gRPC на основе HTTP/2 Создан для использования преимуществ встроенной безопасности транспортного уровня в обоих направлениях. (TLS) и другие функции.
Узнать больше gRPC Причины измотивации, а также ее изобретение и ее преимущества очень важны. Почему бы не использовать У нас уже есть существующие технологии: например HTTP/2 и Вебсокеты? Зачем нам нужен еще один уровень абстракции поверх того, что у нас уже есть?
Данные могут быть структурированы различными способами и переданы Internet Отправить данные. Некоторые популярные примеры: SOAP、REST и ГрафQL. Вы даже можете создать свой собственный протокол с помощью оригинального TCP Отправьте данные и при необходимости выполните реализацию самостоятельно.
Но что бы вы ни выбрали в качестве своего из Протокол связи, проблема существования заключается в том, что вам необходимо убедиться, что клиент и сервер согласовали протокол. Например, если вы существуете строите REST API, вам нужно отправить REST Клиентская библиотека для данных HTTP библиотека. HTTP Библиотека встроена в браузер по умолчанию, и браузер сделает все за вас:
Да,еслиты несуществовать Что делать в браузере?еслитыдасуществоватьсервербежит дальше Python Приложения, GoLang CLI илисуществовать iOS бежит дальше Flutter А что насчет приложений? Всем этим клиентам требуются собственные HTTP библиотека, которая понимает протокол связи, с которым вы общаетесь.
Удачливыйизда,Многие посвященныеиз Люди в вертикальном положениисуществоватьдлявсеэтотнекоторые языкиирамка开发各добрый HTTP библиотека. В некоторых языках даже есть несколько языков с разными функциями. HTTP библиотека. Однако за все это приходится платить — и это обслуживание.
если вы хотите обновить серверприезжать HTTP/2 (если вы используете GoLang библиотека поддерживает это), эта стоимость может повлиять на вас. Но да,существоватьваш интерфейс Python На клиенте эквивалент HTTP Библиотека еще не реализована HTTP/2 может больше не поддерживаться автором. Другие языки с разными HTTP-библиотеками нельзя сравнивать в соотношении 1:1.
вместе с HTTP Чтобы регулировать разработку, эти библиотеки должны идти в ногу с достижениями, проблемами безопасности, новыми функциями и другими исправлениями. HTTP Только даодин пример, правда в WebSocket То же самое касается протоколов и любых других протоколов. Некоторые вещи могут быть хорошо реализованы в основном браузере, но эту функциональность необходимо портировать на несколько разных языковых платформ.
gRPC пытается решить эту проблему, поддерживая сами библиотеки для популярных языков, а это означает, что все эти языки будут поддерживать новые функции по мере их добавления.
существуют под капотом gRPC использовать HTTP/2 В соответствии с протоколом, но да, эта реализация действительно скрыта. В будущем gRPC Сопровождающий может легко преобразовать HTTP/2 Заменить на HTTP/3, вы сразу же получите выгоду от этого изменения.
gRPC Также используйте буферы протоколов в качестве языка определения интерфейса. (IDL) и Первый этажинформацияобмен Формат。этотдобрый Форматданейтральный к языкуиз,Может легко общаться между различными языками программирования. Мы рассмотрим эту концепцию подробнее в следующем разделе.
Protocol buffers да Google Независимый от языка и платформы масштабируемый механизм сериализации структурированных данных — подумайте об этом. XML,Но меньше, быстрее и проще. Вы определяете структуру данных один раз. Затем,Вы можете легко записывать структурированные данные в различные источники данных и читать структурированные данные на разных языках.
Традиционноиспользовать API, у вас нет самого протокола для определения контракта. Например, еслиуиспользоватьизда REST, обычно вы просто отправляете ключ/значение, верноиз JSON информация,Эти ключи/значения не будут проверяться до достижения принимающей стороны. Эта информация обычно может дать что угодно,Вы должны убедиться, что определена правильная структура.
Просмотрите следующую полезную нагрузку JSON:
1‘id’: 123
2‘name’: ‘Gordon’,
3‘email’: ‘gordon@somewhere.io’
существовать как только клиент/сервер получит эти данные,Вы можете десериализовать его в одиночный объект.,Например:
1class Person {
2 int id;
3 String name;
4 String email
5}
Да,как разработчик,тынуждатьсяхотетьдля Вышеуказанная полезная нагрузкавыполнитьправильныйизсериализацияипротивоположныйсериализациялогика——этот Может включать ручноеписатьtoJson
иfromJson
метод,Зависит от генерации кода,или же ваш язык из встроенных функций может существоватьиспользовать.
Независимо от того, как вы сериализуете эти данные,если архитектура изменится,Оба могут потребовать ручного обновления базового кода в нескольких средах.
использовать буфер протокола,Вы можете создать одну модель, чтобы определить поля типов слонов и указать, какие из них требуются.,Какие варианты доступны:
// The request message containing the person’s information
Message Person {
optional int32 id = 1;
required string name = 2;
optional string email = 3;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
Затем вы можете указать процессы, которые будут доступны.
1// The greeting service definition.
2service Greeter {
3 // Sends a greeting
4 rpc SayHello (Person) returns (HelloReply) {}
5}
После того, как вы укажете структуру данных,ты Вот и всеиспользовать буфер протоколакомпиляторprotoc
оттыизопределение прототипасерединактыиз Предпочтительное языковое поколениеданныекласс доступа。
Они будут описаны proto документсередина Обзоризвернослонизинтерфейс,Каждое поле имеет средства доступа,А также сериализация/разбор всей структуры на необработанные байты из метода.
gRPC Существует четыре способа передачи. Эти четыре режима повторяют поведение, которое мы обсуждали ранее, например, обычный запрос/ответ, SSE. и WebSockets。
RPC за один доллар за простой запрос и ответ,Аналогично вызову функции. Клиент запрашивает некоторые данные,Сервер выполняет некоторую обработку и возвращает данные.
Сервер потоковой передачи RPC,При котором клиент отправляет серверу одинокий запрос и ожидает нескольких ответов или потока ответов. Клиент читает из обратного изпоток,Пока не приеду больше никакой информации.
одинпримердавидеопоток,Вы просили загрузить видео,Сервер отвечает видеопотоком.
Клиентский потоковый RPC,в котором клиент пишет серию информации и отправляет ее на сервер прибытия.,Снова используйте предложения изпоток. После того, как клиент завершит написание информации,Он будет ждать, пока сервер прочитает информацию и вернет ответ.
один пример загрузки одного большого файла на сервер проживания,Как только все данные будут отправлены,Клиент может отправить окончательную информацию, указывающую на завершение загрузки.,И сервер может выбрать ответ.
Клиентский и серверный поток мультимедиа и комбинация. Приложение для чат-программы или многопользовательской видеоигры, в котором требуются данные, обеспечивает свободное перемещение потока, например между клиентом и сервером.
Двусторонняя потоковая передача RPC,Обе стороны используют поток чтения и записи, отправляя серию данных. Два потока работают независимо,Таким образом, клиенты и серверы могут читать и писать в любом порядке.
существовать Двусторонняя потоковая передача RPC середина,Вызов инициируется вызывающим методом клиента. Обработка потока на стороне клиента и на стороне сервера зависит от приложения и з. Благодаря независимости двух потоков,Поэтому клиент и сервер могут читать и записывать информацию в любом порядке.
Возможности gRPC изодина из примеров существованиямикросервисов.
В этом примере мы написали измикросервисы на Python, Java и GoLang. Они должны существовать для передачи данных между собой.
использовать HTTP/1.1 и JSON вам потребуется реализовать для каждого языка HTTP возможность сериализации. Вам также необходимо убедиться, что схема реализована правильно для каждого языка, если API В случае изменения все службы необходимо обновить вручную.
С другой стороны, gRPC справь это для нас HTTP/2.0 протоколизвыполнить。писатьодинокиймодель,Соответствующие коды могут быть сгенерированы для всех используемых языков. Эту модель можно рассматривать как да Все языки должны соответствовать условиям контракта.,Сделайте связь между этими службами проще и надежнее.
gRPC Очень быстро, обычно Сравнивать REST Эквивалент работает намного лучше:
gRPC Эффективное сжатие отправленных данных имеет значительные преимущества, поскольку тем меньшая нагрузка данных требуется для передачи. TCP Меньше поездок туда и обратно. максимальная единица передачи (MTU) да представляет собой самый большой пакет из метрики, который примет сетевое устройство, т.е. 1,500 байт.
Compress сделает это за вас, вы просто используете gRPC Вы можете извлечь из этого пользу. В качестве альтернативы вы можете существовать регулярным HTTP Перед отправкойиспользуйте GZIP Что-то вроде этого для сжатия JSON информация. Однако это может доставлять неудобства и усложнять задачу. Также могут использоваться различные языковые среды. GZIP Другие эквивалентные инструменты сжатия имеют разные уровни поддержки. верно Для каждого выбранного вами языка вам потребуется самостоятельно переопределить правильную логику сжатия и связи. Это связано с нашим обсуждением HTTP Проблема с библиотеками аналогична.
еслитыиспользовать множество разных языков программирования,Эти языки должны быть тесно интегрированы друг с другом.,и необходимость быстро и часто отправлять большие объемы данных из средств связи.,Так gRPC Выбирайте даperfectиз.
преимущество:
недостаток:
Протокол WebRTC свободен от проекта с открытым исходным кодом, это существующий открытый стандарт. дальшепредложения по применениюв реальном временикоммуникация (RTC) Функция. Он поддерживает существование и другие возможности для отправки видео, голоса и универсальных данных.
Технология работает как набор технологий во всех основных браузерах. JavaScript API Применимо к Android и iOS Предоставляются приложения и другие собственные клиентские библиотеки.
WebRTC существование принципиально отличается от WebSockets и gRPC, который однажды Учреждатьсоединять, данные могут (в некоторых случаях существовать) напрямую существовать между браузерами и устройствами. реальном время передачи без контактного сервера.
Это уменьшает задержку и позволяет WebRTC Идеально подходит для Аудио, Совместное использование видео или экрана — важна низкая задержка и требуется отправка больших объемов контента.
WebRTC Цель существования Стандартизировать способы передачи средств массовой информации (таких как аудио и видео) по проводам. - и благодаря простому в использовании API Достигайте этой цели удобно.
Другие решения, такие как WebSockets действительно могут передавать любые данные между двумя и другими точками, однако эти данные необходимо передавать через прокси или сервер; Использование другого сервера увеличивает задержку, поскольку все, отправленное через него, необходимо просмотреть, обработать и расшифровать. Между двумя коллегами есть посредник. да, в видеопотоке даже в реальном временичат,Эта задержка нежелательна.
Сейчас существующий браузер также более мощный, чем Сравнивать несколько лет назад. Браузер может получить доступ к веб-камере и микрофону, они должны быть встроенными. API Простой способ передать эту богатую информацию. ВебRTC Направлен на упрощение всего процесса и упрощение использования родных браузеров. API。
Мотивация задана: WebRTC кажется волшебным решением.,Это может ускорить общение между двумя равными сторонами. Но, к сожалению, изда,Оставьте несколько вопросов.
Вопрос один да Учредить, чтобы подключиться непросто - Интернет сложен, Калифорния из Alice и Южная Африкаиз Ben Между ними установлено множество маршрутизаторов, прокси-серверов и межсетевых экранов. В некоторых случаях существование прямой линии между двумя верно равными точками может оказаться невозможным. Между двумя другими точками изоединять может потребоваться обойти блокировку открытого соединения брандмауэра, у вас может не быть публичного доступа. IP Адрес или маршрутизатор могут не обеспечивать возможность прямого соединения между другими точками.
Вторая проблема заключается в том, что у двух одноранговых узлов должен быть способ обнаружить друг друга и определить лучший маршрут для связи. Для этого требуется, чтобы определенная информация была разделена между двумя клиентами, прежде чем они смогут узнать, как лучше всего общаться друг с другом. - Распространенные способы поделиться этой информацией WebSockets。
этотиметьточказабавный。одинHTTPсоединятьповышен доWebSocketсоединять Толькодадля обмена УчреждатьWebRTCсоединятьизинформация。
Если ты действительно хочешь знать WebRTC функциональности и ее сложности, вам необходимо ознакомиться с некоторой терминологией, с которой вы, возможно, не знакомы: NAT, STUN, TURN, ICE, SDP. исигнализация。
существоватьвышеиз Обзорсередина,мы описываем WebRTC Мотивация, которая описывает основную идею того, как это работает. В этом разделе будут рассмотрены некоторые темы более низкого уровня, которые вам необходимо знать, чтобы полностью понять WebRTC。
учиться NAT да Что и как работает, чтобы разобраться WebRTCключевойхотеть。
NAT Используется для предоставления общедоступной информации на ваше устройство (ноутбук и мобильный телефон). IP адрес;Это важно, потому что мы хотим существовать, вероятно, как за маршрутизатором, так и между двумя верными и другими точками Учреждатьсоединять. Маршрутизатор будет иметь один общедоступный IP адрес,соединятьприезжатьмаршрутизатор из Каждое устройство будет иметь один частный IP адрес.
Эти устройства не имеют прямого доступа к Интернету. Напротив,Весь трафик проходит через внешний маршрутизатор связи. Когда вы запрашиваете ресурс с удаленного сервера,Маршрутизатор отвечает за «маршрутизацию» запросов от локального компьютера к серверу.,И направьте ответ сервера обратно на локальный компьютер.
Эти запросы выполняются из личного кабинета устройства. IP Трансляция общедоступного адреса для маршрутизатора с уникальным портом IP - а затем сохранитьсуществовать NAT стол. Таким образом, нет необходимости, чтобы каждое устройство в локальной сети имело уникальный общедоступный IP。
Картинка выше да NAT Простой пример таблицы. Предположим, частное IP для192.168.1.50излокальное устройствопроситьобщественныйадрес82.88.31.26:80возьми немногоданные.
Это сначала отправляет запрос на маршрутизатор через локальное устройство.,Маршрутизатор направит запрос о прибытии на удаленное устройство для достижения цели. Затем,Маршрутизатор сообщает удаленному устройству отправить ответ на адрес «приехать», имеющий уникальный портвнешний IP-адрес.,существовать Этот примерсерединадля86.88.71.25:8830。
Этот единственный экспорт очень важен,Потому что это позволит маршрутизатору определить локальное устройство, отправляющее запрос. Вся эта информация хранится в существующих таблицах NAT. Как только маршрутизатор получит ответ о прибытии.,Он может выполнить поиск и решить, на какое локальное устройство переслать ответ.
Когда у нас есть один нормальный запрос/ответ, верно - одно устройство и один сервер,этоточень легко понять。Да,если Другойодинимеют совершенно разные IP Адресвнешнее устройство решило отправить пакет на тот же порт, что и внешний маршрутизатор. IP адрес, что происходит? Должен ли маршрутизатор пересылать его на карту прибытия на этот порт с локального устройства?
Решение зависит от того, какой маршрутизатор использовать NAT Преобразуйте и определите, можно ли Учрежденияверно и соединяться. В зависимости от вашего роутера он будет работать по-разному NAT Конвертировать. Есть четыре разных NAT Метод преобразования:
одинверноодин NAT:Воляодинвнешний IP Адресипорт (обычно общедоступный) карты прибытияодин внутренний IP адресипорт(в целомдачастныйиз)。существоватьвышеиз Примерсередина,еслимаршрутизаторсуществоватьпорт8830ивнешний IP 86.88.71.25Крупным планомприезжатьответ,этовстреча Воляего пересылкаприезжатьлокальное устройство192.168.1.50,Потому что здесь запрос отправляется на локальное устройство (информация NAT берется из таблицы). Маршрутизаторы не заботятся об IP-адресе назначения или источнике ответа.,Он перенесет проживание на локальное устройство.
Address restricted NAT : Только в том случае, если локальное устройство ранее отправило пакет «Приехать» на удаленное. IP адресчас,Только удаленное устройство может отправлять пакеты на локальное устройство. Суммируя,Мы разрешаем это только в том случае, если хост уже связывался с ним ранее. существоватьиз примера выше,Толькопозволять Приходить自86.88.71.25данные Сумка。
Port restricted NAT : иадрес Ограничения такие же, как и у NAT, но ограничения включают и номера портов. если внутреннее устройство ранее отправило пакет приехать IP адрес X ипорт P, удаленное устройство может отправлять пакеты только на внутреннее устройство. существовать В приведенном выше примере разрешено только 86.88.71.25ипорт80。
верносказать NAT:Самый строгий。дляэтот,внешний IP、внешнийпорт、IP-адрес назначенияиЦельпортВсе должныи NAT Совпадения хранятся в таблице существованияиз. Это значит, что пакеты можно отправлять только на локальное устройство конкретного устройства при условии, что устройство запрашивает IP-адрес. назначения ипортировать оборудование.
WebRTC не могусуществоватьверносказать NAT Чтобы работать, чтобы понять, зачем нам нужно понять, что да STUN сервер.
STUN да Протокол, который можно передать NAT Рассказать вам о вашей публике IP адрес/порт и определите любые ограничения на вашем маршрутизаторе, которые будут блокировать иверно и другие стороны, напрямую подключающиеся. Оглушение Сервер Да Механизм, позволяющий клиентам обнаружить NAT изжитьсуществоватьк及 NAT набери и определи NAT внешний IP картографирование адресипорта.
один STUN-запрос от глазизда для подтверждения существования вашего публичного депозита,Таким образом, этот общественный депозит можно разделить с другими людьми.,Таким образом они смогут связаться с вами — такой вид связи называется сигнализацией.,Мы обсудим это подробно позже.
это适использовать Водинверноодин、адрес ограниченипорт ограничен из NAT。但不适использовать Вверносказать NAT。потому чтодлякогдаты К STUN Когда сервер запрашивает вашу общедоступную информацию, это сообщение создается специально для клиента, отправившего запрос. использоватьверно NAT Нельзя задействовать другие точки, например, одиночно. - Связь через порты локальных устройств ограничена STUN сервер.
Серверы STUN легкие и не требуют особого обслуживания. Существуют общедоступные STUN-серверы, к которым можно обращаться бесплатно.
На рисунке ниже показано STUN Когда работать, а когда Учреждатьверно этсоединять.
с другой стороны,если Не могущий Учреждатьточкаверноточкасоединять,Например,когдавернождатьточка Кусочек Вверносказать NAT после напряженного - шаг не будет разрешен 3 серединаиз окончательного соединения. Из-за первоначального соединения STUN Сервер Учреждатьиз, никакие другие верные и другие стороны не могут использовать эту соединяющую информацию.
существовать Не могущий Учреждатьпрямойсоединятьизслучай,я们нуждатьсяхотетьиспользовать TURN сервер.
TURN да Протокол для ретрансляции сетевого трафика, когда он не может существовать между двумя другими точками, которые могут напрямую соединяться. Например, такая точка, как еслиодинверно находится в верном положении, называется NAT После этого необходим выделенный сервер для ретрансляции трафика между другими точками. существования. В таком случае вы создадите одини TURN Сервер изоединять,и скажите всем верно и другим сторонам отправлять пакеты на этот сервер,Эти пакеты затем будут перенаправлены вам.
Затраты на обслуживание и эксплуатацию серверов TURN могут быть высокими.
На рисунке ниже показано, как существует сервер TURN, обеспечивающий ретрансляцию информации между двумя или несколькими верными и другими точками.
ICE использовать STUN и TURN Комбинация протоколов, предоставляющая хостам механизм обнаружения общих IP адреси Учреждатьпрямойсоединять。если Не могущийпрямойсоединять,ICE Воляиспользовать TURN существоватьмежду двумя хостами Учреждатьсерединаследоватьсоединять。
Все эти возможные пути называются ICE кандидат. Все сборы по адресу пройдены. SDP Отправить приезжать удаленно Верно и другие стороны, которые мы обсудим дальше. ВебRTC Эта информация является лучшим способом определить возможность подключения других точек на каждом клиенте. Возможно, два верны, а другие точки существуют так же, как и один. NAT Включено и может Учреждать местное соединение, или да, возможно, две и другие точки существуют и называются постоянно. NAT позади и нужно использовать TURN Серверное реле.
SDPПо сутидаодиндобрый描述媒体встреча话изданные Формат,Используется для объявлений о сеансе, приглашений на сеанс, других форм и начала сеанса. Он описывает соединение мультимедийного контента со стандартными.,Напримерразрешение、Формат、Кодек и шифрование.
Важное изда, оно также используется для описания ICE Кандидаты и другие варианты сетевого взаимодействия. Когда верно подожди A Хотите соединятьприезжать и так далее? B когда им нужно поделиться SDP информация для подключения. Как поделиться этим SDP полностью зависит от - Это называется сигнализацией, которую мы рассмотрим далее.
сигнализациядасуществовать Отправка управляющей информации между двумя устройствами для определения протокола связь, канал, медиакодек и формат, метод передачи данных и любая необходимая информация о маршрутизации процесса. о WebRTC процесс изсигнализации,большинствоважное издахотеть Знать:это没иметьсуществоватьспецификациясерединаопределение。
верно, et соединять обрабатывает соединение двух приложений на разных компьютерах. Соединение обнаруживается посредством переговорного процесса, называемого сигнализацияиз Учреждатьиз.
один Тяжелыйхотетьизпредупреждатьда WebRTC В спецификации нет встроенного сигнала, поскольку два устройства не могут напрямую взаимодействовать друг с другом, что мы подробно рассмотрели ранее. верюиспользовать WebRTC соединятьиз Две верные равные точки, они нужны друг другу из SDP данные.
поэтому,как разработчик,Вы несете ответственность за способ передачи этой информации на оба устройства. одинпоток ОК в настройках С помощью WebSockets пользователи могут отправлять сообщения туда и обратно по электронной почте и вводить сообщения вручную.
Как только вы поделитесь этой информацией, у вас будет два верных и др. балла Учреждать. WebRTC соединить все необходимое, это может быть как напрямую, так и через TURN сервер.
ты甚至Может能встреча问:ядля Чтохотетьиспользовать Веб РТК? Кажется, это сложно понять, и еще сложнее настроить.
Его сложно настроить, но он имеет множество преимуществ:
недостаток:
Протокол, который вы выберете, будет зависеть от ваших конкретных потребностей.
HTTP:использовать HTTP/2 теперь обеспечивает двустороннюю связь между клиентами и серверами. В зависимости от вашего приложения вам может не потребоваться полнодуплексная связь, например SSE Такого рода вещей достаточно. Мы также существуют найденные в этой статье WebSockets и gRPC зависит от HTTP, в то время как WebRTC Нужен какой-то другой канал изсигнализации. Прежде чем углубляться в эти другие протоколы, стоит сначала изучить HTTP да может решить ваши потребности в приложениях.
WebSocketsбольшинство适合нуждатьсяхотетьдвустороннийкоммуникацияизв реальном приложения времени, такие как приложение для программа чата. Их также относительно легко настроить. Но да, WebSockets менее эффективен, чем gRPC или WebRTC, они плохо подходят для приложений, которым необходимо отправлять большие объемы данных.
gRPCдаодиндобрый Сравнивать WebSockets Более эффективный протокол, более подходящий для приложений, которым необходимо отправлять большие объемы данных. Но да, gRPC изнастраиватьииспользовать Сравнивать WebSockets Более сложный. Если вам нужно сделать много мелких API Позвоните, gRPC даодин - хороший выбор. Или, когда вы реализуете микросервисы на различных языках программирования, требующих взаимодействия, то сериализация структурированных данных и генерация кода gRPC сэкономят вам много времени. Также стоит отметить, что вы не можете легко использовать его из браузера. г РПК. Для этого вам необходимо использовать выделенный прокси-сервер для трансляции вызовов. - Видетьgrpc-web。
WebRTCда Браузери Низкая задержка между устройствамив реальном Самый эффективный протокол связи, идеально подходящий для приложений, которым необходимо отправлять большие объемы данных. ВебRTC Также предоставляет один простой в использовании API можно использовать непосредственно в браузере, чтобы легко делиться камерой, звуком, экраном и другими файлами. Но да, WebRTC ИзSetup ииспользовать может быть сложной задачей, поскольку требует выполнения сигнализации и обслуживания. TURN и STUN сервер.