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.
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).
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente