WebRTC vs Websockets: если WebRTC может делать видео, аудио и данные, зачем нужны веб-узлы?

Итак, я хочу создать чат-приложение, которое позволит видео, аудио и текст. Я потратил некоторое время на изучение Websockets и WebRTC, чтобы решить, что использовать. Поскольку в WebRTC есть много видео и аудио приложений, это звучит как разумный выбор, но есть ли другие вещи, которые я должен рассмотреть? Не стесняйтесь делиться своими мыслями.

Вещи вроде:

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

  • Масштабируемость - Websockets использует сервер для сеанса, а WebRTC - p2p

  • Мультиплексирование/несколько чатов - Используется в Hangouts в Google+, и я все еще просматриваю демонстрационные приложения о том, как реализовать

  • Сервер - веб-узлам необходимо, чтобы RedisSessionStore или RabbitMQ масштабировались на нескольких компьютерах

Ответ 1

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

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

WebSocket, с другой стороны, предназначен для двунаправленной связи между клиентом и сервером. Потоковое аудио и видео можно передавать через WebSocket (см., Например, здесь), но технология и API не предназначены для эффективной и надежной потоковой передачи, как это делает WebRTC.

Как уже говорилось в других ответах, WebSocket может использоваться для сигнализации.

Я веду список ресурсов WebRTC: настоятельно рекомендую начать с просмотра презентации ввода-вывода Google 2013 года о WebRTC.

Ответ 2

WebSockets:

  • Утвержден стандарт IETF (6455) с поддержкой всех современных браузеров и даже устаревших браузеров, использующих полифилл web-socket-js.

  • Использует HTTP-совместимое рукопожатие и порты по умолчанию, что значительно упрощает использование с существующей инфраструктурой межсетевого экрана, прокси-сервера и веб-сервера.

  • Гораздо проще API браузера. В основном один конструктор с парой обратных вызовов.

  • Только клиент/браузер на сервере.

  • Поддерживает только надежный, упорядоченный транспорт, поскольку он построен на TCP. Это означает, что отбрасывание пакетов может задержать все последующие пакеты.

WebRTC:

  • Только начинает поддерживаться Chrome и Firefox. MS предложила несовместимый вариант. Компонент DataChannel еще не совместим между Firefox и Chrome.

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

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

  • Сложный и многослойный браузер API. Существуют библиотеки JS для предоставления более простого API, но они молоды и быстро меняются (как и сам WebRTC).

Ответ 3

В Websockets используется протокол TCP.

WebRTC в основном UDP.

Таким образом, основной причиной использования WebRTC вместо Websocket является латентность. С потоковой передачей через websocket у вас будет либо высокая латентность, либо прерывистое воспроизведение с низкой задержкой. С помощью WebRTC вы можете добиться низкой латентности и плавного воспроизведения, что является важным фактором для VoIP-коммуникаций.

Просто попробуйте протестировать эти технологии с потерей сети, то есть на 2%. Вы увидите большие задержки в потоке Websocket.

Ответ 4

webRTC или websockets? Почему бы не использовать оба.

При создании видео/аудио/текстового чата webRTC определенно является хорошим выбором, так как он использует технологию однорангового соединения и, как только соединение запущено и работает, вам не нужно передавать сообщение через сервер (если не использовать TURN).

При настройке связи webRTC вы должны задействовать какой-то механизм сигнализации. Websockets может быть хорошим выбором здесь, но webRTC - это путь для получения информации о видео/аудио/тексте. Чаты выполняются в сигнализации.

Но, как вы помните, не каждый браузер поддерживает webRTC, поэтому веб-сайты иногда могут быть хорошим резервом для этих браузеров.

Ответ 5

Безопасность - это один из аспектов, который вы пропустили.

С помощью Websockets данные должны проходить через центральный веб-сервер, который обычно видит весь трафик и может получить к нему доступ.

С помощью WebRTC данные шифруются и не проходят через сервер (за исключением случаев, когда требуются серверы TURN, но они не имеют доступа к телу сообщений, которые они отправляют).

В зависимости от вашего приложения это может быть или не иметь значения.

Если вы отправляете большие объемы данных, экономия в стоимости облачной полосы пропускания из-за архитектуры webRTC P2P может также заслуживать внимания.

Ответ 6

Сравнение websocket и webrtc несправедливо.

Websocket основан на вершине TCP. Граница пакета может быть обнаружена из информации заголовка пакета websocket в отличие от tcp.

Как правило, webrtc использует websocket. Передача сигналов для webrtc не определена, провайдеру услуг является то, какую сигнализацию он хочет использовать. Это могут быть SIP, HTTP, JSON или любое текстовое/двоичное сообщение.

Сигнальные сообщения могут быть отправлены/получены с использованием websocket.

Ответ 7

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

Ответ 8

Websocket и WebRTC могут использоваться вместе, Websocket в качестве сигнального канала WebRTC, а webrtc - это видео/аудио/текстовый канал, также WebRTC может быть в UDP также в TURN relay, TURN relay поддерживает TCP HTTP и HTTPS. Многие проекты используют Websocket и WebRTC вместе.