«Итак, WebRTC старый или новый?»

Спросил любопытный студент

📚 Свяжитесь с нами. Хотите узнать, что нового на книжной полке Pragmatic? "Подпишитесь на нашу рассылку". Вы будете первыми, кто узнает о выступлениях авторов, о книгах в бета-версии, новых печатных книгах и промокодах, дающих вам скидки до 40%.

Этой осенью я снова преподаю свой курс WebRTC. Версия курса, которую я читал год назад, в конечном итоге привела к созданию моей книги Программирование WebRTC:



В преподавании мне больше всего нравится задавать вопросы студентам. Сложно, когда вы преподаете в классе, полном разработчиков, которые каким-то образом догадались, что вопросы - это признак невежества (это не так), а не признак любопытства и интеллектуальной глубины (100%).

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

WebRTC от проекта до спецификации 1.0

С одной стороны, самые ранние технические основы того, что мы теперь знаем как WebRTC, можно проследить до приобретения Google Global IP Solutions в мае 2010 года. Так что это старый, во времена Интернета.

С другой стороны, спецификация WebRTC 1.0 не стала рекомендацией W3C до января 2021 года, всего восемь месяцев назад на момент написания этой статьи. Значит, новый?

С этой точки зрения, конечно, но имейте в виду, что самый ранний рабочий черновик WebRTC был опубликован незадолго до Хэллоуина 2011 года. Итак, вернемся к старому. Спецификация W3C ориентирована на API, представленные в браузере, и содержит множество ссылок на многочисленные RFC, управляющие базовыми протоколами WebRTC, разработанными группой IETF RTCWEB, которая сама была учреждена в 2011 году. Эти протоколы тоже имеют легендарную десятилетнюю историю развития.

Все дело в реализации браузера

Все прекрасные мелочи относительно недавней технологической истории - но все это не имеет большого значения для веб-разработчиков, которые переходят на WebRTC в 2021 году. Самое важное в завершенной спецификации - это то, что она становится авторитетным источником для сравнения ошибки и странное поведение браузера против. Конечно, это абсолютно необходимо при отладке вашего собственного приложения и составлении отчетов об ошибках. Изменяющаяся спецификация - рабочий проект W3C или черновик редактора, даже рекомендация кандидата - может быть изменена.

Но источником ошибок и странностей часто является не столько текущая спецификация, сколько реализация спецификации в реальных используемых браузерах.

И это реализации, которые омрачают воду разработки WebRTC и, вероятно, способствовали тому, что веб-разработчики так долго держали WebRTC на расстоянии вытянутой руки или даже дальше.

Как и любой веб-API, WebRTC не реализован идеально ни в одном браузере, равно как и в любых двух браузерах. И, несмотря на все слишком распространенные знания, нет, вам не нужно заставлять пользователей Chrome использовать приложение WebRTC. Даже Chrome еще не реализовал ключевую функцию для RTCDataChannels - двоичный тип Blob - и, следовательно, продолжает отклоняться от спецификации, инициализируя двоичный тип ArrayBuffer при открытии нового канала данных.

Но спецификация WebRTC не просто описывает свойства и методы основных API-интерфейсов браузера WebRTC: она также предлагает примеры шаблонов для их оркестровки. Наиболее критичным из них является модель идеальных переговоров. Конечно, шаблон идеального согласования терпит неудачу в браузерах, которые не реализовали должным образом API и конечный автомат WebRTC, как указано в спецификации. Это включает в себя старые браузеры, которые все еще находятся в обращении, а также самые последние версии Safari на всех платформах Apple.

Я очень стараюсь показать в Программирование WebRTC, что вы все еще можете изящно обойти сломанные и неполные реализации и создать приложение WebRTC, которое делает все, что от него ожидается. Да, ваше приложение может транслировать аудио и видео, но также может открывать каналы для безопасной одноранговой передачи произвольных данных приложения. Это включает в себя решение проблемы отсутствия поддержки двоичного типа Blob в Chrome.

Окончательный ответ: старое и новое

Фундаментальная, вечная правда веб-разработки заключается в том, что наши технологии всегда старые и новые. Веб-разработка уникальна по многим причинам, но я бы сказал, что ее самая уникальная особенность - или ошибка, в зависимости от вашей точки зрения - заключается в том, что веб-разработчики не имеют никакого контроля над рабочей средой после того, как их работа покинула сервер.

При использовании WebRTC при истинном одноранговом соединении сервер отсутствует!

Конечно, мы часто строго контролируем наши собственные среды выполнения, выполняя начальную разработку в последней версии Chrome или Firefox каждую ночь, обращаясь к документации и, возможно, к окончательной спецификации W3C по ходу дела. Но затем необходимо совершить небольшое путешествие во времени и начать изучать идиосинкразические и глубоко странные реализации в старых, но все еще распространенных браузерах.

Какие у вас мысли и вопросы? Вы сделали что-нибудь интересное с WebRTC? Поделитесь пожалуйста в комментариях.

Готовы поэкспериментировать с WebRTC? Возьмите книгу Карла Столли на книжной полке Прагматик. Теперь до 31 октября 2021 года вы можете сэкономить 35% на электронной версии Программирование WebRTC (сейчас в бета-версии), используя код купона webrtc_medium_35. Промокоды недействительны для предыдущих покупок.

Оставайтесь на связи

Отличный способ оставаться на связи с The Pragmatic Bookshelf - это подписаться на нашу рассылку новостей. Вы будете первыми, кто узнает о новых книгах для программистов, бета-версиях книг и промокодах, дающих вам скидки до 40%.