Одна из передовых технологий, которая сжигает Интернет

WebRTC приобрел большую популярность в сообществе веб-разработчиков за последнее десятилетие. Благодаря пандемии (хотя и в положительном смысле) многие компании начали переходить на постоянную работу из дома👨‍💻 , например, Atlassian, Shopify, Spotify, Twitter… (Боже мой, этот список можно продолжить). Это внедрение удаленной работы побудило большинство компаний приобрести инструменты для общения в реальном времени, такие как MS Teams и Gmeet, в которых WebRTC является основным компонентом.

По данным PayScale, средняя зарплата WebRTC-разработчика в США в 2022 году составит около 74 136 долларов в год. Довольно солидная плата, хорошо, давайте сразу перейдем к теме.

Что такое WebRTC?

WebRTC — это платформа с открытым исходным кодом, которая позволяет передавать данные в реальном времени с помощью надежного протокола и методов шифрования.

Этими данными в реальном времени могут быть аудио, видео или, может быть, простое строковое сообщение, которым можно обмениваться очень быстро и безопасно, всего несколькими строками кода! 💆

С чего начать 🤔

Когда мы как разработчики сталкиваемся с новой технологией, мы часто не можем понять, с чего начать. Лучше всего было бы сразу перейти к практическому подходу.

Давайте начнем с простого описания, следуя принципу KISS 😘. Откройте редактор кода и скопируйте и вставьте приведенный ниже код.

Обычный javascript скучен, давайте добавим к нему немного html и css начинки 🥳

Потрясающий! 🤩 Мы сделали это! 😎 Мы создали чат-приложение на базе WebRTC. Теперь давайте лучше разберемся в коде.

Части HTML и CSS говорят сами за себя, поэтому мы можем сосредоточиться только на javascript. В этом примере мы создали простое приложение для чата, которое использует встроенный в WebRTC dataChannelAPI для отправки и получения сообщений чата.

Итак, что такое канал данных?

Канал данных WebRTC — это среда, через которую одноранговый узел может отправлять и получать сообщения через одноранговое соединение.

Таким образом, канал данных похож на мост, который используется для отправки и получения сообщений.

Что такое peerConnection?

Одноранговое соединение WebRTC соединяет одноранговые узлы в разных сеансах, чтобы они могли общаться с использованием однорангового протокола.

Проще говоря, peerConnection обрабатывает набор протоколов, по которым происходит передача данных между разными компьютерами. Он обрабатывает детали, например, куда отправить сообщение и какое сообщение должно быть отправлено на какой компьютер. Когда мы закончим с peerConnection, нам нужно понять основные компоненты peerConnection.

  • RTCIceCandidate
  • Протокол описания сеанса (sdp)

Лед что ли?

Interactive Connectivity Establishment (ICE) — это структура, которая действует как протокол и механизм маршрутизации для одноранговых узлов для связи с использованием RTCPeerConnection.

С использованием протокола ICE будут сгенерированы кандидаты. iceCandidate — это строка, содержащая информацию о сетевой маршрутизации, с помощью которой пакеты данных передаются в peerConnection.

Хорошо, а как насчет SDP?

SDP — это еще один протокол, который содержит информацию, относящуюся к сеансу, такую ​​как поддерживаемые аудио- или видеокодеки, алгоритмы шифрования и другие сведения, относящиеся к устройству.

SDP — один из основных компонентов WebRTC. Кроме того, первым шагом в создании соединения WebRTC между двумя одноранговыми узлами является создание и обмен sdp (предложение и ответ).

Чтобы создать соединение WebRTC, мы проходим этап сигнализации🚥. Давайте разберемся с потоком сигналов WebRTC, послушав 💞 историю.

История Ромео🤵 — Джульетты👩‍💼

Ромео хочет отправить сообщение Джульетте, поэтому он решает использовать WebRTC. Romeo создает предложение sdp из своего локального RTCPeerConnection и устанавливает его в качестве локального описания. Теперь Ромео отправляет предложение sdp Джульетте 💌 через какой-то протокол связи (возможно, через сокет).

localConnection = new RTCPeerConnection();
localConnection.createOffer().then((offer) => {
    localConnection.setLocalDescription(offer);
    // send offer to Juliet👩‍💼
}

Джульетта получает предложение и устанавливает его как удаленное описание и создает ответ sdp для локальной установки, отправляет его обратно Ромео 💌.

remoteConnection = new RTCPeerConnection();
remoteConnection.setRemoteDescription(offer).then(() => {
    remoteConnection.createAnswer().then((answer) => {
        remoteConnection.setLocalDescription(answer)
        // send answer to Romeo🤵
    })
})

Получив ответ-сдп, Ромео обрадовался и установил его в качестве своего удаленного описания. В результате на обоих концах стали генерироваться ледяные кандидаты, которыми затем обмениваются 💌 в режиме реального времени.

localConnection.setRemoteDescription(answer)
localConnection.onicecandidate = (event) => {
    remoteConnection.addIceCandidate(event.candidate);
    // send candidate to Juliet👩‍💼
}
remoteConnection.onicecandidate = (event) => {
    localConnection.addIceCandidate(event.candidate);
    // send candidate to Romeo🤵
}

Теперь соединение готово для отправки и получения данных, но Ромео нужен секретный канал данных для отправки и получения сообщений, поэтому он создает его и отправляет свое первое сообщение.

sendChannel = localConnection.createDataChannel("romeo-juliet");
sendChannel.send("Hey my love ❤️");

Джульетта, с другой стороны, прослушивает только что созданный канал данных и получает сообщение.

receiveChannel.onmessage = (event) => {
    message = event.data; //Hey my love ❤️
}

такой счастливый конец не так ли 😊 , как это вообще возможно ?

БУМ!!! Не удалось отправить сообщение.

Что может быть причиной этой ошибки? Что должен сделать Ромео, чтобы решить эту проблему? Ждем ваших ответов в разделе комментариев.

Заключение

Я знаю, что это будет ошеломляюще, так как мы обсудили много концепций в этом кратком блоге. Лучший способ изучить новые технологии — развить любопытство и попробовать экспериментировать. Прежде всего, рекомендуется прочитать документацию. Да, чтение документации — один из лучших способов лучше понять суть вещей. Вы также можете найти ответы на приведенные выше вопросы 💡😉 проверьте это.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube,и Discord. Заинтересованы в Взлом роста? Ознакомьтесь с разделом Схема.