WebRTC vs Websockets: si WebRTC puede hacer video, audio y datos, ¿por qué necesito Websockets? [cerrado]

220

Así que estoy buscando construir una aplicación de chat que permita video, audio y texto. Pasé un tiempo investigando en Websockets y WebRTC para decidir cuál usar. Dado que hay muchas aplicaciones de video y audio con WebRTC, esto parece una opción razonable, pero ¿hay otras cosas que debería considerar? Siéntete libre de compartir tus pensamientos.

Cosas como:

  • Debido a que WebRTC es nuevo, solo está disponible en algunos navegadores, mientras que WebSockets parece estar en más navegadores.

  • Escalabilidad: Websockets utiliza un servidor para la sesión y WebRTC parece ser p2p.

  • Multiplexación / salas de chat múltiples: se usa en Hangouts de Google+ y todavía estoy viendo aplicaciones de demostración sobre cómo implementarlas.

  • Servidor: Websockets necesita RedisSessionStore o RabbitMQ para escalar en varias máquinas.

1ManStartup
fuente

Respuestas:

272

WebRTC está diseñado para una comunicación de video, audio y datos arbitrarios de alto rendimiento y alta calidad. En otras palabras, para aplicaciones exactamente como las que usted describe.

Las aplicaciones WebRTC necesitan un servicio a través del cual puedan intercambiar metadatos de redes y medios, un proceso conocido como señalización. Sin embargo, una vez que se ha realizado la señalización, el video / audio / datos se transmite directamente entre los clientes, evitando el costo de rendimiento de la transmisión a través de un servidor intermediario.

WebSocket, por otro lado, está diseñado para la comunicación bidireccional entre el cliente y el servidor. Es posible transmitir audio y video a través de WebSocket (consulte aquí, por ejemplo), pero la tecnología y las API no están diseñadas inherentemente para una transmisión eficiente y robusta de la forma en que lo está WebRTC.

Como han dicho otras respuestas, WebSocket se puede usar para señalizar.

Mantengo una lista de recursos de WebRTC : recomienda encarecidamente que comience por mirar el 2013 Google I / O presentación sobre WebRTC.

Sam Dutton
fuente
2
Gracias por la respuesta detallada ... ¿alguna actualización casi dos años después?
Crashalot
2
Recomiendo echar un vistazo a los recursos vinculados anteriormente: consulte g.co/webrtc .
Sam Dutton
3
Tampoco es que (creo) WebRTC se pueda configurar para ser menos estricto sobre el orden de los paquetes y demás, por lo que puede ser mucho más rápido si no le importa la pérdida de paquetes, etc. (es decir, tener los últimos datos es más importante que tener todos los datos): stackoverflow.com/a/13051771/993683
1
Creo que las palabras clave aquí están en ese momento . La función de respaldo de sondeo de Socket.io ahora es redundante, por lo que le queda una biblioteca delgada que tiene características fáciles de implementar a un costo de rendimiento horrible. No me hagas empezar: D.
Lucas
1
@SamDutton, ¿Seguramente el servidor puede duplicarse como un igual y usar un extremo del RTCDataChannel? Como tal para la programación web moderna , ¿no veo ninguna ventaja de websocket? desde RTCDataChannel es UDP / tiempo real?
Pacerier
71

WebSockets:

  • Ratificó el estándar IETF (6455) con soporte en todos los navegadores modernos e incluso en los navegadores heredados que usan web-socket-js polyfill.

  • Utiliza el protocolo de enlace compatible con HTTP y los puertos predeterminados, lo que lo hace mucho más fácil de usar con la infraestructura existente de firewall, proxy y servidor web.

  • API de navegador mucho más simple. Básicamente un constructor con un par de devoluciones de llamada.

  • Cliente / navegador al servidor solamente.

  • Solo admite transporte confiable y en orden porque está construido en TCP. Esto significa que la caída de paquetes puede retrasar todos los paquetes posteriores.

WebRTC:

  • Recién comenzando a ser compatible con Chrome y Firefox. MS ha propuesto una variante incompatible. El componente DataChannel aún no es compatible entre Firefox y Chrome.

  • WebRTC es navegador a navegador en circunstancias ideales, pero aun así casi siempre requiere un servidor de señalización para configurar las conexiones. Las soluciones de servidor de señalización más comunes en este momento usan WebSockets.

  • La capa de transporte es configurable con la aplicación capaz de elegir si la conexión está en orden y / o es confiable.

  • API de navegador compleja y multicapa. Hay bibliotecas JS para proporcionar una API más simple, pero estas son jóvenes y están cambiando rápidamente (al igual que el propio WebRTC).

canaca
fuente
44
El soporte del navegador WebRTC es mucho mejor ahora. caniuse.com/#search=WebRTC
tuxayo
58

Websockets utiliza el protocolo TCP.

WebRTC es principalmente UDP.

Por lo tanto, la razón principal de usar WebRTC en lugar de Websocket es la latencia. Con la transmisión websocket, tendrá una alta latencia o una reproducción entrecortada con baja latencia. Con WebRTC puede lograr una baja latencia y una reproducción fluida, que es un elemento crucial para las comunicaciones VoIP.

Simplemente intente probar estas tecnologías con una pérdida de red, es decir, 2%. Verá grandes retrasos en la secuencia de Websocket.

ankitr
fuente
2
Para aquellos interesados, esto se explica con más
39

webRTC o websockets? ¿Por qué no usar ambos?

Al crear un chat de video / audio / texto, webRTC es definitivamente una buena opción, ya que utiliza tecnología punto a punto y una vez que la conexión está en funcionamiento, no es necesario que pase la comunicación a través de un servidor (a menos que use TURN).

Al configurar la comunicación webRTC, debe involucrar algún tipo de mecanismo de señalización. Websockets podría ser una buena opción aquí, pero webRTC es el camino a seguir para la información de video / audio / texto. Las salas de chat se logran en la señalización.

Pero, como usted menciona, no todos los navegadores admiten webRTC, por lo que los sockets web a veces pueden ser una buena alternativa para esos navegadores.

Mikael Holmgren
fuente
10

Comparar websocket y webrtc es injusto.

Websocket se basa en la parte superior de TCP. El límite del paquete se puede detectar a partir de la información del encabezado de un paquete websocket a diferencia de tcp.

Por lo general, webrtc hace uso de websocket. La señalización para webrtc no está definida, depende del proveedor de servicios qué tipo de señalización desea utilizar. Puede ser SIP, HTTP, JSON o cualquier mensaje de texto / binario.

Los mensajes de señalización se pueden enviar / recibir utilizando websocket.

Austin
fuente
10

La seguridad es un aspecto que te perdiste.

Con Websockets, los datos deben pasar a través de un servidor web central que normalmente ve todo el tráfico y puede acceder a él.

Con WebRTC, los datos se cifran de extremo a extremo y no pasan a través de un servidor (excepto que a veces se necesitan servidores TURN, pero no tienen acceso al cuerpo de los mensajes que reenvían).

Dependiendo de su aplicación, esto puede o no importar.

Si está enviando grandes cantidades de datos, también puede valer la pena considerar el ahorro en los costos de ancho de banda de la nube debido a la arquitectura P2P de webRTC.

Tim Panton
fuente
1
Es un error pensar que WebRTC es estrictamente un protocolo de igual a igual. Está comenzando a ver un uso generalizado en la industria como una alternativa VOIP basada en servidor.
photicSphere
Además, cuando implementamos WebSocket como un flujo de medios de WebRTC, utiliza SIP y el SIP es un protocolo de texto sin formato que se ha utilizado para VoIP.
M. Rostami
6

Webrtc es parte de la conexión punto a punto. Todos sabemos que antes de crear una conexión de igual a igual, se requiere un proceso de comunicación para establecer una conexión de igual a igual. Y los websockets juegan el papel del proceso de apretón de manos.

Rohit yadav
fuente
3

Websocket y WebRTC se pueden usar juntos, Websocket como un canal de señal de WebRTC, y webrtc es un canal de video / audio / texto, también WebRTC puede estar en UDP también en el relé TURN, el relé TURN admite TCP HTTP también HTTPS. Muchos proyectos usan Websocket y WebRTC juntos.

visión de enlace
fuente