¿WebRTC usa http?
Abrir una nueva conexión TCP para cada solicitud se convirtió en un problema a medida que evolucionó la web. Comenzamos a construir aplicaciones completas en lugar de páginas web simples, y la cantidad de medios y archivos que un navegador necesitaba para recuperar se convirtió en más. Imagine una aplicación web típica que requiere un archivo HTML, CSS y JavaScript, así como varias imágenes y otros activos. Para cada archivo, se debía hacer una nueva conexión.
WebRTC vs HTTP Streaming
Возienen жно, адреса электрtiment ектронной почты е е частников, чтобы увидеть исходное сообщениее.
-Discutir-WEBRTC
He estado experimentando con los protocolos de transmisión de WebRTC y HTTP (HLS, MPEG-Dash) para la transmisión de video en vivo durante unos días, y he descubierto que, si bien WebRTC logra las latencias de sub segundo lugar, los protocolos de transmisión HTTP siempre tienen latencias de varios segundos. Por lo tanto, tengo un par de preguntas relacionadas con la transmisión de WebRTC vs HTTP.
1. ¿Cómo puede WebRTC alcanzar las latencias de sub segundo lugar en comparación con los protocolos de transmisión HTTP??
WEBRTC puede lograr latencias sub segundo en comparación con los protocolos de transmisión HTTP debido a sus capacidades de comunicación en tiempo real (RTC). WebRTC está creado para proporcionar a las aplicaciones transmisión instantánea de video, audio y otros datos entre pares. Esto permite una transmisión prácticamente instantánea de contenido, lo que resulta en sub segundo lugar.
2. Si WEBRTC ya proporciona transmisión de video de baja latencia, ¿por qué hay un esfuerzo para unificar los protocolos de transmisión HTTP bajo el estándar MPEG-Dash??
El esfuerzo por unificar los protocolos de transmisión HTTP bajo el estándar MPEG-Dash está impulsado por la necesidad de un enfoque estandarizado para la transmisión basada en HTTP. Si bien WebRTC proporciona transmisión de video de baja latencia, no es adecuado para todos los casos de uso y puede no ser compatible con todos los dispositivos y software. Al unificar los protocolos de transmisión HTTP bajo el estándar MPEG-Dash, se vuelve más fácil para los proveedores de contenido ofrecer transmisión de video de alta calidad en diferentes plataformas y dispositivos, asegurando una experiencia de visualización constante para los usuarios.
3. ¿Cómo se compara WebRTC con RTMP?? (No he explorado RTMP hasta ahora, pero quiero saber si es posible lograr latencias sub-segundo con RTMP)
WebRTC y RTMP son protocolos utilizados para la transmisión de medios, pero tienen algunas diferencias en términos de latencia y compatibilidad. WebRTC está diseñado para la comunicación en tiempo real y puede lograr latencias sub-segundo, lo que lo hace adecuado para aplicaciones que requieren transmisión instantánea. Por otro lado, RTMP (protocolo de mensajería en tiempo real) es un protocolo utilizado principalmente para transmitir audio, video y datos entre un codificador y un servidor de transmisión. Si bien RTMP puede proporcionar una transmisión de baja latencia, el logro de latencias sub-segundo puede depender de varios factores, como las condiciones de la red y las configuraciones del servidor.
Un estudio comparativo entre la transmisión basada en WebRTC y HTTP
Durante mucho tiempo, reducir la latencia de transmisión ha sido un tema popular. Se sabe que las latencias de decenas de segundos, e incluso un minuto, ocurren con la transmisión basada en HTTP en el pasado. Con latencia de transmisión tradicional en los segundos de un solo dígito y las soluciones emergentes como Servicios de desarrollo de WebRTC, La pregunta es qué enfoque tomar. La transmisión de WebRTC es capaz de entregar video no solo en subseconds, sino en menos de 500 milisegundos. Actualmente es la tecnología de transmisión de menor latencia disponible, lo que permite una transmisión prácticamente instantánea.
En esta guía ingeniosa, veremos cómo funciona WebRTC y lo compararemos con HTTP desde la perspectiva de un servicio de transmisión de video. Empecemos!
Un resumen rápido de la transmisión basada en HTTP y WEBRTC
Los protocolos basados en HTTP son servidores web técnicamente regulares que envían descargas progresivas. Utilizan la transmisión adaptativa de tasa de bits para proporcionar la mejor calidad de video posible y la experiencia de visualización, independientemente de la conexión, el software o el dispositivo. Algunos de los protocolos basados en HTTP más comunes disponibles incluyen MPEG-Dash, Apple’S HLS, Adobe HDS y Microsoft Smooth Streaming.
WebRTC es un protocolo robusto que está respaldado por excelentes herramientas y un amplio soporte de la industria. Fue creado para proporcionar aplicaciones con capacidades de comunicación en tiempo real (RTC), permitiendo que se transfieran videos, audio o cualquier otro tipo de datos entre pares. Esta es una distinción clave entre los dos en comparación con la transmisión basada en HTTP, que está orientada.
UDP VS. TCP
Los componentes básicos de la suite de Internet, el protocolo de datagrama de usuarios (UDP) y el protocolo de control de transmisión (TCP), ambos residen en la capa de transporte.
La principal distinción entre UDP y TCP es que TCP requiere un apretón de manos de tres vías mientras transmite datos. El iniciador (Cliente) solicita que el aceptador (servidor) establezca una conexión, el aceptador respuestas y el iniciador reconoce la respuesta y mantiene una sesión entre los dos extremos. Por lo tanto, TCP es extremadamente creíble y puede lidiar con la pérdida de paquetes y el pedido.
UDP, por otro lado, no’T requiere un apretón de manos para comenzar. Transfiere datos independientemente de las limitaciones de ancho de banda, lo que lo hace tanto más rápido como más riesgoso. Debido a que UDP no admite retransmisiones, pedidos de paquetes o verificación de errores, un hipo de red tiene el potencial de contaminar los datos en tránsito.
Los protocolos como WebRTC a menudo usan UDP, mientras que los protocolos basados en HTTP usan TCP.
¿Cómo se acumula WebRTC versus transmisión basada en HTTP??
- ¿Qué tipo de latencia estás buscando??
- ¿Cuál será el tamaño de la audiencia??
- ¿Cuál es la cantidad máxima que está dispuesto a gastar??
Latencia
Las respuestas a las preguntas de latencia dependen del rango de latencia que apunta.
El HLS nuevo y mejorado como LL-HLS y LL-Dash tiene una latencia de 3 segundos o menos. Esto todavía se considera rápido, y será suficiente para la mayoría de los casos de uso de baja latencia. WebRTC, por otro lado, sigue siendo la solución más rápida si su caso de uso requiere la transmisión en tiempo real. Dado que es un protocolo UDP desarrollado para adaptarse completamente a la Internet moderna. Admite 500 ms de latencia en tiempo real.
WebRTC fue diseñado para proporcionar comunicación bidireccional en tiempo real. A diferencia de HLS, que se basa en TCP, WebRTC se basa en el UDP. Esto significa que WebRTC puede comenzar sin que el cliente y el servidor intercambien cualquier información de apretón de manos. Como resultado, WebRTC es más rápido, pero también lo hace más susceptible a las fluctuaciones de la red.
WEBRTC es el protocolo para emplear si su solución requiere transmisión entre pares y en tiempo real. Sin embargo, si necesita hacer crecer a su audiencia por encima de 50 personas, deberá reconsiderar su estrategia.
En comparación con el HLS, la escala WEBRTC es sustancialmente más difícil. Sin embargo, esto se puede resolver con un flujo de trabajo híbrido. Su elección será determinada por su caso de uso y tamaño de la audiencia objetivo.
Cuando se trata de llegar al público masivo, los protocolos basados en HTTP salen en la cima.
¿WebRTC usa http?
Abrir una nueva conexión TCP para cada solicitud se convirtió en un problema a medida que evolucionó la web. Comenzamos a construir aplicaciones completas en lugar de páginas web simples, y la cantidad de medios y archivos que un navegador necesitaba para recuperar se convirtió en más. Imagine una aplicación web típica que requiere un archivo HTML, CSS y JavaScript, así como varias imágenes y otros activos. Para cada archivo, se debía hacer una nueva conexión.
WebRTC vs HTTP Streaming
Возienen жно, адреса электрtiment ектронной почты е е частников, чтобы увидеть исходное сообщениее.
-Discutir-WEBRTC
He estado experimentando con los protocolos de transmisión de WebRTC y HTTP (HLS, MPEG-Dash) para la transmisión de video en vivo durante unos días, y he descubierto que, si bien WebRTC logra las latencias de sub segundo lugar, los protocolos de transmisión HTTP siempre tienen latencias de varios segundos. Por lo tanto, tengo un par de preguntas relacionadas con la transmisión de WebRTC vs HTTP.
1. ¿Cómo puede WebRTC alcanzar las latencias de sub segundo lugar en comparación con los protocolos de transmisión HTTP??
2. Si WEBRTC ya proporciona transmisión de video de baja latencia, ¿por qué hay un esfuerzo para unificar los protocolos de transmisión HTTP bajo el estándar MPEG-Dash??
3. ¿Cómo se compara WebRTC con RTMP?? (No he explorado RTMP hasta ahora, pero quiero saber si es posible lograr latencias sub-segundo con RTMP)
Un estudio comparativo entre la transmisión basada en WebRTC y HTTP
Durante mucho tiempo, reducir la latencia de transmisión ha sido un tema popular. Se sabe que las latencias de decenas de segundos, e incluso un minuto, ocurren con la transmisión basada en HTTP en el pasado. Con latencia de transmisión tradicional en los segundos de un solo dígito y las soluciones emergentes como Servicios de desarrollo de WebRTC , La pregunta es qué enfoque tomar. La transmisión de WebRTC es capaz de entregar video no solo en subseconds, sino en menos de 500 milisegundos. Actualmente es la tecnología de transmisión de menor latencia disponible, lo que permite una transmisión prácticamente instantánea.
En esta guía ingeniosa, veremos cómo funciona WebRTC y lo compararemos con HTTP desde la perspectiva de un servicio de transmisión de video . Empecemos!
Un resumen rápido de la transmisión basada en HTTP y WEBRTC
Los protocolos basados en HTTP son servidores web técnicamente regulares que envían descargas progresivas. Utilizan la transmisión adaptativa de tasa de bits para proporcionar la mejor calidad de video posible y la experiencia de visualización, independientemente de la conexión, el software o el dispositivo. Algunos de los protocolos basados en HTTP más comunes disponibles incluyen MPEG-Dash, Apple’S HLS, Adobe HDS y Microsoft Smooth Streaming.
WebRTC es un protocolo robusto que está respaldado por excelentes herramientas y un amplio soporte de la industria. Fue creado para proporcionar aplicaciones con capacidades de comunicación en tiempo real (RTC), permitiendo que se transfieran videos, audio o cualquier otro tipo de datos entre pares. Esta es una distinción clave entre los dos en comparación con la transmisión basada en HTTP, que está orientada.
UDP VS. TCP
Los componentes básicos de la suite de Internet, el protocolo de datagrama de usuarios (UDP) y el protocolo de control de transmisión (TCP), ambos residen en la capa de transporte.
La principal distinción entre UDP y TCP es que TCP requiere un apretón de manos de tres vías mientras transmite datos. El iniciador (Cliente) solicita que el aceptador (servidor) establezca una conexión, el aceptador respuestas y el iniciador reconoce la respuesta y mantiene una sesión entre los dos extremos. Por lo tanto, TCP es extremadamente creíble y puede lidiar con la pérdida de paquetes y el pedido.
UDP, por otro lado, no’T requiere un apretón de manos para comenzar. Transfiere datos independientemente de las limitaciones de ancho de banda, lo que lo hace tanto más rápido como más riesgoso. Debido a que UDP no admite retransmisiones, pedidos de paquetes o verificación de errores, un hipo de red tiene el potencial de contaminar los datos en tránsito.
Los protocolos como WebRTC a menudo usan UDP, mientras que los protocolos basados en HTTP usan TCP.
¿Cómo se acumula WebRTC versus transmisión basada en HTTP??
- ¿Qué tipo de latencia estás buscando??
- ¿Cuál será el tamaño de la audiencia??
- ¿Cuál es la cantidad máxima que está dispuesto a gastar??
Latencia
Las respuestas a las preguntas de latencia dependen del rango de latencia que apunta.
El HLS nuevo y mejorado como LL-HLS y LL-Dash tiene una latencia de 3 segundos o menos. Esto todavía se considera rápido, y será suficiente para la mayoría de los casos de uso de baja latencia. WebRTC, por otro lado, sigue siendo la solución más rápida si su caso de uso requiere la transmisión en tiempo real. Dado que es un protocolo UDP desarrollado para adaptarse completamente a la Internet moderna. Admite 500 ms de latencia en tiempo real.
WebRTC fue diseñado para proporcionar comunicación bidireccional en tiempo real. A diferencia de HLS, que se basa en TCP, WebRTC se basa en el UDP. Esto significa que WebRTC puede comenzar sin que el cliente y el servidor intercambien cualquier información de apretón de manos. Como resultado, WebRTC es más rápido, pero también lo hace más susceptible a las fluctuaciones de la red.
WEBRTC es el protocolo para emplear si su solución requiere transmisión entre pares y en tiempo real. Sin embargo, si necesita hacer crecer a su audiencia por encima de 50 personas, deberá reconsiderar su estrategia.
En comparación con el HLS, la escala WEBRTC es sustancialmente más difícil. Sin embargo, esto se puede resolver con un flujo de trabajo híbrido. Su elección será determinada por su caso de uso y tamaño de la audiencia objetivo.
Cuando se trata de llegar al público masivo, los protocolos basados en HTTP salen en la cima. Mientras “CDNS” Para WebRTC existe, el costo a menudo es prohibitivo.
Costo
WebRTC es un protocolo de código abierto y gratuito. Pero recuerda cómo hablamos sobre la escalada de WebRTC? Es completamente posible y funciona de manera efectiva en muchos casos de uso, pero no es barato. Si no necesita transmitir a cientos de personas, WebRTC es una gran opción. Sin embargo, si desea llegar a una gran audiencia, tendrá que gastar dinero en servidores adicionales para disminuir la carga del navegador.
HLS es quizás el método de entrega de video más rentable. La escala con un CDN se justifica fácilmente desde el punto de vista de los costos porque emplea infraestructuras HTTP asequibles y tecnología de red actual basada en TCP.
Conclusión
En los últimos años, el protocolo basado en HTTP y WEBRTC han recorrido un largo camino. A pesar del hecho, ambas son tecnologías de vanguardia que están impulsando a la industria hacia adelante, cada una tiene su propio conjunto de ventajas y desventajas. Ninguna de las opciones es ideal para todos, pero una de ellas puede ser la mejor para ti.
Al final, el protocolo óptimo estará determinado por las características de su proyecto, los dispositivos a los que se distribuirá y la escala de su audiencia. Al desarrollar una solución de baja latencia, tenga en cuenta estas cosas.
Curioso por encontrar la mejor solución para usted? Póngase en contacto con nuestros expertos en transmisión de video en vivo!
HTTP, WebSocket, GRPC o WEBRTC: qué protocolo de comunicación es el mejor para su aplicación?
Active su prueba gratuita de 30 días hoy y comience a crear prototipos.
- Construir chat de video
- ¿Qué es una SFU?
- Protocolos de transmisión de video
- Videoconferencia P2P
Compartir artículo a:
Al elegir un protocolo de comunicación para sus aplicaciones, hay muchas opciones diferentes. En esta publicación, nosotros’LL Echaría un vistazo a cuatro soluciones populares: Http, Websocket, GRPC, y Webrtc. Exploraremos cada protocolo investigando la tecnología detrás de él, lo que’es mejor utilizado para y sus fortalezas y debilidades.
· Publicado el 26 de septiembre de 2022
Nuestras formas de comunicación están mejorando constantemente: ser más rápido, más conveniente y más confiable. Nuestra comunicación ha evolucionado desde el envío de mensajes utilizando palomas de transporte, correo postal, a la invención del teléfono fijo, al correo electrónico y mensajes de texto desde un pequeño dispositivo que se ajusta a nuestros bolsillos.
En el futuro, incluso podemos hacer una transición de reuniones y fiestas de cumpleaños a VR (con suerte, esto es solo una broma!). Pero la mejor forma de comunicación siempre dependerá de la situación.
Un mensaje de texto rápido a veces es mejor que un correo electrónico largo. Otras veces, una videollamada con el equipo es la mejor manera de intercambiar información. En contraste, se deben enviar documentos de seguro importantes por correo regular y entregar en copia impresa.
Lo mismo también es cierto para las tecnologías y protocolos web que utilizamos. Diferentes aplicaciones tienen diferentes necesidades de comunicación.
Descripción general
En este artículo, nosotros’Cubra algo popular Protocolos de comunicación Podemos usar como desarrolladores y explorar los pros y los contras de las diferentes opciones. Ninguna solución es mejor que otra: solo hay algunos que son mejores para una aplicación o problema en particular.
Algunas aplicaciones requieren una conexión de igual a igual, con baja latencia y alta transferencia de datos, y pueden aceptar alguna pérdida de paquetes (información). Otras aplicaciones pueden encuestar el servidor según lo necesario y Don’Necesito recibir comunicación de un par diferente. Otras aplicaciones requieren comunicación en tiempo real con confiabilidad de datos.
Un juego multijugador en línea, aplicación de mensajería, sitio web de blog, aplicación de galería de medios y software de videoconferencia tienen diferentes niveles de comunicación y necesidades de datos.
Si está creando una solución de transmisión de video, entonces también hay otras consideraciones, consulte nuestro artículo sobre protocolos de transmisión de video para obtener más información sobre cómo elegir la correcta.
¿Qué es un protocolo de comunicación??
En las redes de computadora, un protocolo es un conjunto de reglas que rigen cómo se intercambian los datos entre los dispositivos. El protocolo define las reglas, la sintaxis, la semántica y la sincronización de la comunicación y los posibles métodos de recuperación de errores.
Los protocolos discutidos en este artículo definen cómo el software de la capa de aplicación interactuará entre sí. Diferentes protocolos se adhieren a diferentes reglas, y’es esencial para comprender las fortalezas y limitaciones de cada. En este artículo, tu’Aprenderá sobre los siguientes protocolos:
Http (Protocolo de transferencia de hipertexto) es un protocolo de aplicación para sistemas de información distribuidos, colaborativos e hipermedios. HTTP es la base de la comunicación de datos para la World Wide Web. Hypertext es un texto estructurado que utiliza enlaces lógicos (hipervínculos) entre nodos que contienen texto. Http es el protocolo para intercambiar o transferir hipertexto.
Http/2 fue diseñado para abordar las deficiencias del protocolo HTTP original y para mejorar el rendimiento. Http/2 es más rápido y más eficiente que http/1.1, y es compatible con la multiplexación para permitir que múltiples solicitudes y respuestas se multiplicen a través de una sola conexión. Otras características notables incluyen compresión de encabezado y empuje del servidor. Él’se convierte gradualmente en el protocolo predeterminado para el tráfico web.
Websocket es un protocolo que permite la comunicación bidireccional entre un cliente y un servidor. Es una opción popular para aplicaciones que manejan datos en tiempo real, como aplicaciones de chat, juegos en línea y transmisión de datos en vivo.
GRPC es un marco RPC de código abierto moderno que utiliza HTTP/2 para el transporte. Es una excelente opción para aplicaciones que necesitan hacer muchas llamadas de API pequeñas y rápidas. GRPC genera enlaces de cliente y servidor multiplataforma para muchos idiomas, lo que permite que una aplicación cliente llame directamente a un método en una aplicación de servidor en una máquina diferente como si fuera un objeto local.
Webrtc es una tecnología que permite la comunicación en tiempo real entre los clientes y hace posible establecer conexiones directas entre pares. Se usa para aplicaciones de transmisión de video, chat, intercambio de archivos y videos en vivo.
Comprender TCP y UDP
Antes de profundizar en las capas de aplicación mencionadas anteriormente,’Es importante tener una comprensión básica de TCP y UDP, dos capas de transporte subyacentes que facilitan la transferencia de datos de manera fundamentalmente diferente.
TCP (Protocolo de control de transmisión) es un estándar que define cómo establecer y mantener una conversación de red a través de Internet. TCP es el protocolo más utilizado en Internet y cualquier red orientada a la conexión. Cuando navega por la web, su computadora envía paquetes TCP a un servidor web. Un servidor web responde enviando paquetes TCP de regreso a su computadora. Primero se establece una conexión entre dos dispositivos antes de que se intercambien datos, y TCP utiliza la corrección de errores para garantizar que todos los paquetes se entreguen correctamente. Si un paquete se pierde o corrompe, TCP intentará reenviarlo.
UDP (Protocolo de datagrama de usuario) es un protocolo de capa de transporte sin conexión y sin conexión. No requiere que se establezca o mantenga una conexión y no garantice que los mensajes se entregarán para. Lo que significa que puede haber alguna pérdida de datos si un paquete no se envía o si’s corrupto. UDP a menudo se usa para transmisión de medios o aplicaciones en tiempo real donde los paquetes caídos son menos problemáticos que garantizar la entrega.
Http/1
Él’es importante tener una comprensión básica de la base de todas las comunicaciones basadas en Internet y la transferencia de datos en la capa de aplicación – HTTP (Protocolo de transferencia de hipertexto).
Comprender HTTP/1 y sus limitaciones también serán importantes antes de que podamos explorar los otros protocolos con más detalle y apreciar completamente lo que proporcionan.
Con HTTP, los clientes y los servidores se comunican intercambiando mensajes individuales. Los mensajes que envía el cliente se llaman solicitudes, y los mensajes enviados por el servidor se denominan respuestas. Estos mensajes se envían como mensajes de texto regulares a través de una conexión TCP. También se pueden encriptar usando TLS y enviar utilizando el protocolo HTTPS.
Un cliente normalmente será un navegador o aplicación web que se ejecuta en un usuario’S teléfono o computadora, pero técnicamente podría ser cualquier cosa, por ejemplo, un script que rastree los sitios web.
Las solicitudes HTTP solo pueden fluir en una dirección, desde el cliente hasta el servidor. No hay forma de que el servidor inicie la comunicación con el cliente; Solo puede responder a las solicitudes.
HTTP es perfecto para aplicaciones tradicionales de la web y del cliente, donde la información se obtiene según sea necesario. Por ejemplo, actualiza una página y se hace una solicitud al servidor para obtener la información más reciente.
Sin embargo, este protocolo se expandió de una manera que no se pretendía originalmente. En las siguientes secciones, nosotros’Explore algunos de HTTP/1’S Limitaciones.
Http/1 en tiempo real
HTTP/1 es ineficiente cuando los mensajes deben enviarse en tiempo real desde el cliente al servidor y viceversa. Por ejemplo, si hay nueva información disponible en el servidor que debe compartirse con el cliente, esta transacción solo puede ocurrir una vez que el cliente inicia una solicitud.
Hay soluciones para esto, utilizando técnicas llamadas http breve y largas encuestas, así como eventos de servidor de servidor.
Breve encuesta
La encuesta corta de HTTP es una técnica en la que el cliente envía repetidamente solicitudes al servidor hasta que responda con nuevos datos. Una vez que recibe datos, inicia el proceso nuevamente y se pregunta repetidamente hasta que algo más esté disponible.
Esta es una estrategia de comunicación en tiempo real ineficiente, ya que desperdicia muchos recursos al transmitir y analizar continuamente las solicitudes/respuestas HTTP.
Sondeo largo
Con HTTP Long Polling, se realiza una sola solicitud desde el cliente, y luego el servidor mantiene la conexión abierta hasta que hay nuevos datos disponibles y se puede enviar una respuesta. Después de que el cliente recibe la respuesta, se vuelve inmediatamente una nueva conexión.
Las encuestas largas son más eficientes que las encuestas cortas, pero no es una solución óptima para la comunicación en tiempo real.
Eventos de Servidor-Sent (SSE)
Los eventos enviados al servidor permiten que un cliente mantenga abierto una conexión y reciba actualizaciones (mensajes de presentación) de un servidor en tiempo real, sin tener que encuestar el servidor para obtener nuevos datos constantemente. Esta es una conexión unidireccional, por lo que no puede enviar eventos desde el cliente al servidor.
SSE es un estándar que describe cómo los servidores pueden iniciar la transmisión de datos hacia los clientes una vez que se ha establecido una conexión de cliente inicial.
El problema de rendimiento con http/1
La mayoría de los flujos de datos HTTP consisten en pequeñas transferencias de datos explosivas, mientras que TCP está optimizado para conexiones de larga vida y transferencias de datos a granel. El tiempo de ida y vuelta de la red es el factor limitante en el rendimiento y el rendimiento de TCP en la mayoría de los casos. En consecuencia, la latencia es el cuello de botella de rendimiento y la mayoría de las aplicaciones web lo entregan sobre él.
Lo que significa lo anterior es que TCP, que usa HTTP, fue construido para manejar conexiones de larga vida y para transferir muchos datos. HTTP/1, por otro lado, abriría un montón de conexiones TCP de corta duración y generalmente solo enviaría pequeños datos de datos.
Bloqueo del jefe de línea
Un problema de rendimiento con HTTP/1.0 es que debe abrir una nueva conexión TCP para cada solicitud/respuesta. Esto no fue un problema para lo que HTTP fue inicialmente inventado para obtener un documento de hipertexto. La parte del documento es importante porque HTTP no estaba destinado a “hipermedia”.
Abrir una nueva conexión TCP para cada solicitud se convirtió en un problema a medida que evolucionó la web. Comenzamos a construir aplicaciones completas en lugar de páginas web simples, y la cantidad de medios y archivos que un navegador necesitaba para recuperar se convirtió en más. Imagine una aplicación web típica que requiere un archivo HTML, CSS y JavaScript, así como varias imágenes y otros activos. Para cada archivo, se debía hacer una nueva conexión.
A lo largo viene http/1.1, que tiene conexiones persistentes que definen que podemos tener más de una solicitud o respuesta en la misma conexión TCP.
Esta solución es definitivamente una mejora, pero no permite que el servidor responda con múltiples respuestas simultáneamente. Él’s Un protocolo serializado donde debe enviar una solicitud y esperar la respuesta, luego enviar la segunda solicitud, etc. Esto se conoce como bloqueo del jefe de línea.
Sin embargo, es posible lograr algún paralelismo, ya que un navegador puede abrir hasta seis conexiones TCP al mismo origen, donde “origen” se define como la combinación única de anfitrión y puerto número.
Por ejemplo, si tiene una aplicación de galería de fotos que necesita cargar 12 imágenes, se realizarán seis solicitudes para cargar las primeras seis imágenes, y cada solicitud abrirá una nueva conexión TCP debajo del capó. Las otras seis imágenes se bloquearán hasta que se reciba una respuesta y una de las conexiones abiertas se puede usar para cargar la siguiente imagen. Las seis conexiones TCP de seis abiertas originales al mismo origen se reutilizarán a medida que estén disponibles, pero está limitado a seis conexiones activas.
Naturalmente, los programadores encontraron una solución fácil: al cambiar el origen. En lugar de alojar todos los activos en el mismo origen, aloja seis de las imágenes en un origen y el resto en otro. Ahora puede tener 12 solicitudes simultáneas (o abrir conexiones TCP). Esto se conoce como “fragmento”.
- Imágenes 1-6 están alojados en 1.imágenes.comunicarse
- Imágenes 7-12 están alojados en 2.imágenes.comunicarse
Sin embargo, hay una limitación de cuántas veces puedes hacer esto, y’es difícil determinar un número óptimo de fragmentos. En algún momento, agregar más fragmentos aumentará la complejidad, agregará sobrecarga y podría hacer que los enlaces se congestionen y se pierdan paquetes.
También hay otras preocupaciones, ya que cada conexión TCP agrega sobrecarga innecesaria al servidor. Las conexiones compiten entre sí, cada apretón de manos TCP y TLS agrega un costo innecesario, y se deben utilizar otros recursos de servidor/proxy para mantener las conexiones activas. Hay una clara limitación en la forma en que HTTP/1 utiliza las conexiones TCP subyacentes.
Encabezados y galletas hinchazón
Otro problema es que a medida que evolucionó la especificación HTTP, se han agregado más encabezados a la especificación. Los desarrolladores también tienen la opción de agregar cookies a los encabezados, y estas pueden ser arbitrariamente grandes. Esto agrega mucha hinchazón, ya que cada solicitud y respuesta necesita transmitir toda esta información de texto, y HTTP/1.1 no incluye un mecanismo para comprimir encabezados y metadatos.
Si necesita un protocolo RPC de alto rendimiento, esta sobrecarga se suma rápidamente, y HTTP ya no es una solución óptima.
Priorización
Con http/1.1, navegadores “priorizar” Recursos manteniendo una cola de prioridad en el cliente y tomando conjeturas educadas sobre cómo hacer el mejor uso de las conexiones TCP disponibles. Los navegadores tienen heurísticas integradas para determinar qué recursos son más valiosos que otros.
Por ejemplo, la carga de CSS tendrá una prioridad más alta que la carga de imágenes.
El problema es que no hay forma de que usted, como desarrollador, priorice una solicitud sobre otra o cambie la prioridad de un mensaje continuo. Qué contenido se carga primero depende del navegador, y no tiene voz en el esquema de priorización.
Http/2
HTTP/2 es una versión mejorada del protocolo HTTP y aborda todos los problemas de rendimiento descritos anteriormente con HTTP/1 y agrega otras mejoras sin cambiar ninguna de las semánticas (verbos, encabezados, etc.).
El cambio más significativo en HTTP/2 es el uso de la multiplexación para enviar simultáneamente y recibir múltiples solicitudes y respuestas HTTP sobre un conexión TCP única. Todas las conexiones HTTP/2 son persistentes, y solo se requiere una conexión por origen. Esto permite un uso mucho más eficiente de los recursos de red y puede mejorar significativamente el rendimiento de las aplicaciones.
Algunos otros beneficios de HTTP/2:
- Utiliza la compresión de encabezado para reducir el tamaño de los encabezados, lo que evita enviar los mismos encabezados de texto plano una y otra vez. Esto reduce significativamente la sobrecarga de solicitudes/respuestas y la cantidad de datos enviados.
- Habilita la priorización, permitiendo al cliente (desarrollador) especificar la prioridad de los recursos que necesita. Él’S también es posible actualizar la prioridad de las solicitudes en curso, por ejemplo, en el desplazamiento, si una imagen ya no es visible, la prioridad puede cambiar.
- Utiliza el empuje del servidor para enviar datos al cliente antes de que lo solicite. Esto se puede usar para mejorar los tiempos de carga eliminando la necesidad de que el cliente realice múltiples solicitudes.
¿Cómo funciona HTTP/2??
La unidad de protocolo básica en HTTP/2 es un marco. Este nuevo mecanismo de encuadre binario cambia la forma en que se intercambian los datos entre el cliente y el servidor.
El estándar define diez tipos de cuadros diferentes, cada uno con un propósito diferente. Por ejemplo, los encabezados y los marcos de datos forman la base de las solicitudes y respuestas HTTP:
A marco es la unidad de comunicación más pequeña que lleva un tipo específico de datos.
Algunos otros ejemplos de marco son:
- Configuración: Intercambiar información de configuración al principio o durante una conexión.
- Prioridad: Reasignar prioridad para los mensajes.
- Push_promise: permite que el servidor le presione los datos: esto actúa como una promesa de lo que el servidor enviará. Por ejemplo, si solicita el índice.html, el servidor puede crear un push_promise que promete PUSH APP.JS y estilos.CSS, lo que significa que el cliente no necesita solicitar esos recursos.
Los marcos se combinan para formar un mensaje, Por ejemplo, el encabezado y el marco de datos en la imagen de arriba. Esto equivale a una solicitud o respuesta normal.
Entonces finalmente, una serie de mensajes puede ser parte de un arroyo. Esto permite un flujo de datos bidireccional entre el cliente y el servidor y la multiplexación completa de solicitudes y respuesta.
La imagen de arriba es un poco engañosa, dando la impresión de que múltiples conexiones están abiertas entre el cliente y el servidor. Pero es una sola conexión TCP, y los datos fluyen libremente entre el cliente y el servidor de una manera que no es de bloqueo.
La nueva capa de encuadre binaria permite que el cliente y el servidor descompongan el mensaje HTTP en marcos independientes, los intercalen y luego los vuelva a montar en el otro extremo.
Esto es solo un resumen de cómo http/2.0 trabajos. Si desea obtener más información y explorar la priorización, el empuje del servidor y la compresión del encabezado, consulte este artículo en profundidad. Para una historia de los problemas de HTTP/1 y cómo los resuelve HTTP/2, mire este video.
HTTP/2 transmisión de datos bidireccionales
- Una sola conexión HTTP/2 puede contener múltiples transmisiones abiertas simultáneamente, con cada marcos de intercalación de punto final desde múltiples transmisiones.
- Las transmisiones se pueden establecer y usar unilateralmente o compartidas por el cliente o el servidor.
- Las transmisiones pueden cerrarse por cualquier punto final.
Hay muchos malentendidos con la funcionalidad de empuje del servidor, que permite que un servidor sobre HTTP/2 envíe de manera proactiva los recursos que cree que puede necesitar, por ejemplo, el .JS y .archivos CSS, sin que el cliente lo solicite. Esto no tiene nada que ver con la transmisión bidireccional y es solo una técnica de optimización web para recursos almacenables.
Lo que es cierto es que con HTTP/2 el servidor puede’t inicia un arroyo. Pero una vez que el cliente abre una secuencia enviando una solicitud, ambas partes pueden enviar datos marcos sobre un zócalo persistente en cualquier momento. Un excelente ejemplo de esto es GRPC, que discutiremos más tarde.
Con http/2, es posible lograr la transmisión de datos bidireccionales, y podría argumentar que’s una solución más óptima que algo como WebSockets, o podría argumentar que no es. Nosotros’Discutir esto con más detalle en la sección WebSocket.
Redes web
El objetivo de esta tecnología es proporcionar un mecanismo para las aplicaciones basadas en navegador que necesitan comunicación bidireccional con los servidores que no confían en abrir múltiples conexiones HTTP (E.gramo., Uso de xmlhttprequest o iframes y largas encuestas).
Se inventaron WebSockets para habilitar la comunicación dúplex entre un cliente y un servidor, lo que permite que los datos viajen en ambos sentidos a través de una sola conexión abierta inmediatamente.
Una vez que se establece una conexión WebSocket, el cliente no necesita encuestar un servidor para actualizaciones. En su lugar, la comunicación ocurre bidireccionalmente. Esto mejora la velocidad y la capacidad en tiempo real en comparación con el polling original y corto de HTTP/1. WebSocket no tiene un formato que cumpla con. Puede enviar cualquier dato, texto o bytes: esta flexibilidad es una de las razones por las cuales WebSockets es popular.
Algo de esto puede sonar familiar para lo que discutimos en la sección HTTP/2, pero’Es importante tener en cuenta que los websockets se inventaron mucho antes de HTTP/2. Nosotros’los comparará más después.
Cómo funcionan WebSockets
WebSockets se ejecutan efectivamente como una capa de transporte a través de TCP.
Para establecer una conexión WebSocket, el cliente y el servidor primero deben realizar un apretón de manos en un HTTP/1 normal.1 conexión. Este apretón de manos es el puente de HTTP a WebSockets.
A continuación se muestra un ejemplo de solicitud de apretón de manos del cliente. El cliente puede usar un HTTP/1.1 mecanismo llamado encabezado de actualización para cambiar su conexión de HTTP a WebSockets:
Obtener /chat http /1.1 Anfitrión: Ejemplo.com: 8000 Actualización: WebSocket Conexión: actualización Sec-Websocket-Key: Dghlihnhbxbszsbub25jzq == Sec-Websocket-Versión: 13
Luego, el servidor concluirá el apretón de manos con una respuesta especial que indica que el protocolo cambiará de HTTP a WebSocket:
Http/1.1 101 Protocolos de conmutación Actualización: Conexión de WebSocket: actualización Sec-Websocket-Accept: S3PPLMBITXAQ9KYGZZHZRBK+XOO =
WebSockets requieren un identificador de recursos uniforme (URI) con un esquema ws: // o wss: //. El esquema ws: // se usa para conexiones no cifradas, y el esquema wss: // se usa para conexiones cifradas, similar a cómo las URL http usan http: // o https: // esquema.
Una vez que se establece el canal de comunicación bidireccional, el cliente y el servidor pueden enviar mensajes de un lado a otro. Estos mensajes pueden ser cualquier cosa, desde datos binarios hasta texto. La conexión WebSocket permanecerá abierta hasta que el cliente o el servidor se desconecten.
Multiplexación de WebSocket
Al momento de escribir, el protocolo WebSocket no admite la multiplexación incorporada. Discutimos la multiplexación en la sección HTTP/2, y aprendimos que’S una característica incorporada para HTTP/2, y’es posible tener múltiples transmisiones multiplexadas sobre la misma conexión. Cada transmisión obtiene un identificador único, y todos los marcos enviados tienen una ID asociada con la transmisión correspondiente.
No admitir la multiplexación significa que el protocolo WebSocket requiere una nueva conexión de transporte para cada conexión WebSocket. Por ejemplo, varios clientes que se ejecutan en diferentes pestañas del mismo navegador darán como resultado conexiones separadas. Tener multiplexación sobre WebSockets suele ser algo que necesitará implementar como desarrollador o confiar en un complemento o biblioteca de terceros.
WebSocket vs HTTP/2
Entonces, ha reemplazado HTTP/2 WebSockets? La respuesta corta es no. La respuesta más larga es que HTTP/2 hace posible la transmisión bidireccional, y como resultado, los websockets no son la única/mejor opción. Http/2 como especificación hace más trabajo para usted en comparación con WebSockets. Tiene multiplexación incorporada y, en la mayoría de los casos, dará como resultado menos conexiones TCP abiertas con el origen. Por otro lado, WebSockets proporciona mucha libertad y no son restrictivas en cómo se envían los datos entre el cliente y el servidor una vez que se establece una conexión. Sin embargo, deberá administrar la reconexión usted mismo (o confiar en una biblioteca que haga esto por usted).
¿Cuál es en última instancia mejor, y dónde funcionará y el otro no lo hará, está en debate, y este artículo no proporciona una respuesta obstinada?. WebSockets ofrece mucha flexibilidad, y como estándar establecido, es completamente compatible con todos los navegadores modernos, y el ecosistema en torno a las bibliotecas de clientes y servidores es robusto.
Para discusiones más detalladas y obstinadas, consulte estas preguntas de desbordamiento de pila:
- ¿HTTP/2 hace obsoleto a WebSocket?
- HTTP/2 o WebSockets para mensajes de baja latencia de cliente a servidor
- HTTP/2 vs colegas web para la transmisión de mensajes bidireccionales
También hay un RFC para permitir un mecanismo para ejecutar el protocolo WebSocket en una sola secuencia de una conexión HTTP/2.
Ser capaz de arrancar WebSockets de HTTP/2 permite que una conexión TCP sea compartida por ambos protocolos y extiende el uso más eficiente de HTTP/2 de la red a WebSockets.
Esto se ha implementado en Chrome y Firefox. Puede leer el documento de diseño de Chrome y la motivación aquí.
¿Cuándo debe usar WebSockets??
Las redes web son los más adecuados para aplicaciones que necesitan comunicación bidireccional en tiempo real y cuando se necesitan pequeños datos de datos rápidamente, por ejemplo:
- Aplicaciones de chat
- Juegos multijugador
- Aplicaciones de edición colaborativa
- Ticker deportivo en vivo
- Solicitud de negociación de acciones
- Feeds de actividad en tiempo real
Casualmente, esta es un área donde nuestro equipo tiene mucha experiencia. Nosotros’Realizar extensamente el uso de WebSockets para alimentar nuestro chat y actividades alimentan la infraestructura.
El soporte para WebSockets es bueno y ha sido compatible con los principales navegadores y clientes durante mucho tiempo, y también está bien documentado y es fácil de usar. Sin embargo, WebSockets no debe usarse en exceso; Dependiendo de lo que desee, puede haber mejores alternativas.
Por ejemplo, los eventos enviados por servidor (SSE) son eficientes a través de HTTP/2 y son fáciles de usar. SSE no es un sistema de comunicación bidireccional; El servidor empuja unilateralmente los datos al cliente. Pero si todo lo que necesita es una forma para que el servidor envíe datos a un cliente, esta es potencialmente una mejor opción que agregar la sobrecarga de WebSockets. SSE también vuelve a HTTP/1.1 Cuando http/2 no está disponible. Además, el cliente (o navegador) administra la conexión para usted y admite una reconexión automática.
Si se pierde una conexión sobre WebSockets, no hay mecanismos incluidos para el equilibrio de carga o para volver a conectar. Esto debe ser implementado manualmente o por bibliotecas de terceros.
GRPC
GRPC es un marco moderno de llamadas de procedimiento remoto de alto rendimiento de código abierto (RPC) que puede ejecutarse en cualquier entorno. Puede conectar de manera eficiente los servicios en los centros de datos con soporte conectable para el equilibrio de carga, el rastreo, la verificación de la salud y la autenticación. También se aplica en la última milla de computación distribuida para conectar dispositivos, aplicaciones móviles y navegadores a servicios de back -end.
GRPC es un sistema RPC de código abierto, basado en contratos, inicialmente desarrollado en Google. GRPC permite que las aplicaciones se comuniquen de manera transparente y simplifican la construcción de sistemas conectados.
Genera enlaces de cliente y servidor de plataforma multiplataforma para muchos idiomas, lo que permite que una aplicación de cliente llame directamente a un método en una aplicación de servidor en una máquina diferente como si fuera un objeto local.
Construido en HTTP/2, GRPC aprovechan características como la transmisión bidireccional y la seguridad de la capa de transporte incorporada (TLS).
Motivación de GRPC
Él’Es importante sumergirse en la motivación detrás de GRPC y por qué se inventó comprender sus beneficios. ¿Por qué no usar la tecnología existente que ya tenemos: HTTP/2 y WebSockets, por ejemplo?? ¿Por qué necesitamos otra capa de abstracción además de lo que ya tenemos??
Hay varias formas en que los datos se pueden estructurar y enviar a través de Internet. Algunos ejemplos populares son jabón, descanso y gráfico. Incluso puede crear su propio protocolo, enviar datos a través de TCP sin procesar y manejar la implementación usted mismo si lo desea.
Pero no importa lo que elija como protocolo de comunicación, el problema es que debe asegurarse de que el cliente y el servidor acuerden el protocolo. Por ejemplo, si tu’Re Building a REST API, la biblioteca del cliente que necesita usar para enviar datos de descanso es la biblioteca HTTP. La biblioteca HTTP está integrada en el navegador de forma predeterminada, y el navegador maneja todo por usted:
- Establece comunicación con el servidor.
- Maneja http/2 y retroceso a http/1. Y necesitará admitir HTTP/3 en el futuro.
- Maneja TLS y negocia el protocolo.
- Maneja encabezados, transmisiones y todo lo demás.
Pero y si tu’no estoy en un navegador? Que si tu’Re una aplicación Python que se ejecuta en algún servidor, una CLI de Golang o una aplicación Flutter que se ejecuta en iOS? Todos estos clientes necesitan su propia biblioteca HTTP que comprenda el protocolo con el que se está comunicando.
Afortunadamente, muchas personas dedicadas están trabajando en varias bibliotecas HTTP para todos estos idiomas y marcos. Algunos idiomas incluso tienen múltiples bibliotecas HTTP con diferentes características. Todo esto, sin embargo, tiene un costo, y eso es mantenimiento.
Este costo podría influir en usted en caso de que, por ejemplo, actualice su servidor a HTTP/2 si la biblioteca de Golang que usa lo admite. Pero, en su cliente de Python front-end, la biblioteca HTTP equivalente no ha implementado HTTP/2 o ya no puede mantenerse. No se pueden comparar diferentes bibliotecas HTTP en otros idiomas 1: 1.
A medida que evoluciona la especificación HTTP, estas bibliotecas deben mantenerse al día con los avances, problemas de seguridad, nuevas características y otros parches. Http es solo un ejemplo, y lo mismo es cierto para el protocolo WebSocket o cualquier otro. Algo puede estar bien implementado en los principales navegadores, pero esa funcionalidad debe portarse a múltiples idiomas y marcos.
¿Cómo es GRPC diferente??
GRPC intenta resolver este problema manteniendo la biblioteca para los idiomas populares en sí, lo que significa que las nuevas características agregadas serán respaldadas por todos estos idiomas.
Debajo del capó, GRPC usa HTTP/2 como protocolo, sin embargo, esta implementación está oculta para usted. En el futuro, los mantenedores de GRPC podrían reemplazar fácilmente HTTP/2 con HTTP/3, e inmediatamente se beneficiará de ese cambio.
GRPC también utiliza buffers de protocolo como lenguaje de definición de interfaz (IDL) y su formato de intercambio de mensajes subyacente. Este formato es un lenguaje neutral y permite comunicarse fácilmente entre diferentes lenguajes de programación. Nosotros’Explorar este concepto más en la siguiente sección.
¿Qué son los amortiguadores de protocolo??
Los búferes de protocolos son mecanismo neutral, neutral de la plataforma y extensible de la plataforma de Google para serializar datos estructurados: piense en XML, pero más pequeño, más rápido y más simple. Defina cómo desea que sus datos se estructuren una vez. Luego, puede usar un código fuente generado especial para escribir y leer fácilmente sus datos estructurados hacia y desde una variedad de flujos de datos y usar una variedad de idiomas.
Tradicionalmente con una API, no’tienen un contrato definido por el protocolo mismo. Por ejemplo, si tu’re usando reposo, tu’Por lo general, solo enviar mensajes JSON con pares de clave/valor que no están’t verificación hasta que el mensaje esté en el extremo receptor. Este mensaje generalmente puede ser cualquier cosa, y’S depende de usted asegurarse de que se define la estructura correcta.
Eche un vistazo a la siguiente carga útil JSON:
‘identificación’: 123 ‘nombre’: ‘Gordon’, ‘correo electrónico’: ‘Gordon@en alguna parte.IO’
Una vez que se reciben estos datos en el cliente/servidor, se puede deserializar en un objeto, por ejemplo:
persona de clase
Sin embargo, depende de usted como desarrollador implementar la lógica correcta de serialización y deserilización para la carga útil mencionada anteriormente: esto puede implicar escribir los métodos TOJSON y desde JSON manualmente, confiando en la generación de códigos, o podría ser una característica incorporada del lenguaje USTED’reutilizando.
Independientemente de cómo sea serializa estos datos, el código subyacente deberá actualizarse manualmente, potencialmente en múltiples entornos, en caso de que cambie el esquema.
Con los amortiguadores de protocolo, crea un esquema que define el tipo de objeto para los campos y especifique cuáles son necesarios y cuáles son opcionales:
// El mensaje de solicitud que contiene a la persona’s Mensaje de información Persona < optional int32 required string name = 2; optional string email = 3; >// El mensaje de respuesta que contiene el mensaje de saludos Helloreply
Luego puede especificar los procedimientos que desea exponer.
// La definición del servicio de saludo. servicio de servicio < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
Una vez tú’Ve especificó las estructuras y el esquema de datos, utiliza la protocas del compilador de protocolos para generar clases de acceso a datos en sus idiomas preferidos desde su definición de proto.
Estas serán interfaces que describan los objetos descritos en el archivo Proto, con accesorios para cada campo, así como métodos para serializar/analizar toda la estructura hacia/desde bytes sin procesar.
Modos GRPC
Hay cuatro modos de transporte sobre GRPC. Estos cuatro modos replican el comportamiento que discutimos anteriormente, por ejemplo, una solicitud/respuesta normal, SSE y WebSockets.
RPC unario
Unary RPC es una solicitud y respuesta simples, similar a llamar a una función. El cliente solicita algunos datos, y el servidor realiza algunos procesos y devuelve esos datos.
RPC de transmisión de servidor
RPCS de transmisión del servidor donde el cliente envía una sola solicitud al servidor y espera múltiples o un flujo de respuestas. El cliente lee de la transmisión devuelta hasta que no haya más mensajes.
Un ejemplo sería la transmisión de video, donde solicita cargar un video, y el servidor responde con la transmisión de video.
RPC de transmisión de clientes
RPCS de transmisión del cliente donde el cliente escribe una secuencia de mensajes y los envía al servidor, nuevamente utilizando una transmisión proporcionada. Una vez que el cliente ha terminado de escribir los mensajes, espera que el servidor los lea y devuelva su respuesta.
Un ejemplo sería cargar un archivo grande en el servidor y una vez que se envíen todos los datos, el cliente puede enviar un mensaje final para indicar que la carga está completa, y el servidor puede responder opcionalmente.
Flujo bidireccional RPC
Una combinación de transmisión de cliente y servidor. Una aplicación de chat o un videojuego multijugador es un ejemplo en el que los datos deben fluir entre el cliente y el servidor libremente.
RPC de transmisión bidireccional donde ambas partes envían una secuencia de mensajes utilizando una transmisión de lectura-escritura. Las dos transmisiones funcionan de forma independiente, para que los clientes y los servidores puedan leer y escribir en cualquier orden que deseen.
En un RPC de transmisión bidireccional, la llamada es iniciada por el cliente que invoca el método. El procesamiento de la transmisión del lado del cliente y el servidor es específico de la aplicación. Dado que las dos transmisiones son independientes, el cliente y el servidor pueden leer y escribir mensajes en cualquier orden.
Microservicios
Un buen ejemplo de dónde es poderoso GRPC está dentro de los microservicios.
En este ejemplo, tenemos microservicios escritos en Python, Java y Golang. Estos necesitan enviar datos entre ellos.
Usando http/1.1 y JSON requerirán que implementen las conexiones HTTP y la serialización para cada idioma. También deberá asegurarse de que el esquema se implemente correctamente para cada idioma, y si la API cambia, todos los servicios deben actualizarse manualmente.
GRPC, por otro lado, maneja la implementación del HTTP/2.0 Protocolo para nosotros. Se escribe un solo esquema y el código correspondiente se puede generar para todos los idiomas utilizados. Este esquema puede verse como un contrato al que todos los idiomas deben adherirse, lo que hace que la comunicación entre estos servicios sea mucho más fácil y más confiable.
rendimiento de GRPC
GRPC es rápido y generalmente es mucho más performador que un equivalente de descanso:
- Los buffers de protocolo se serializan y se envían como binarios sobre el cable, que son significativamente más pequeños que los mensajes JSON normales.
- GRPC usa HTTP/2.0 que ofrece más mejoras
GRPC comprimir eficientemente los datos enviados tiene una ventaja significativa, ya que cuanto menor sea la carga útil de los datos transmitida, se necesitan menos viajes redondos TCP. La unidad de transmisión máxima (MTU) es una medida que representa el paquete de datos más grande que aceptará un dispositivo conectado a la red, que es 1.500 bytes.
La compresión se maneja para usted y usted se beneficia simplemente usando GRPC. Como alternativa, es posible usar algo como GZIP para comprimir los mensajes JSON antes de enviar un HTTP regular. Sin embargo, esto puede ser inconveniente y agrega una capa de complejidad. Diferentes idiomas y entornos también pueden tener diferentes niveles de soporte para GZIP y otras herramientas de compresión equivalentes. Y para cada idioma que use, deberá volver a implementar la lógica correcta de compresión y comunicación usted mismo. Este es un problema similar a lo que discutimos sobre la biblioteca HTTP.
¿Cuándo deberías usar GRPC??
Si usted’Re utilizando múltiples lenguajes de programación diferentes que necesitan integrarse estrechamente entre sí, y requieren una comunicación rápida y frecuente que envíe muchos datos, entonces GRPC sería perfecto.
- Con la transmisión de GRPC,’es posible determinar el progreso de carga/descarga fácilmente: sin necesidad de hacer ninguna solicitud innecesaria para actualizaciones.
- Él’es posible cancelar las solicitudes.
- Todos los beneficios de HTTP/2.
- Si GRPC admite su idioma, no’Tengo que preocuparme por las bibliotecas externas.
- GRPC no admite todos los idiomas.
- El esquema puede sentirse restrictivo y engorroso.
- Puede ser complicado configurar en comparación con WebSockets.
- Todavía jóvenes y los errores pueden ser difíciles de depurar.
- La comunicación con GRPC no funciona de forma nativa con los navegadores web. Necesita usar la biblioteca GRPC-WEB.
Webrtc
El protocolo WEBRTC es un proyecto gratuito de código abierto que proporciona capacidades de comunicación en tiempo real (RTC) a su aplicación que funciona además de un estándar abierto. Admite datos de video, voz y genéricos enviados entre pares.
La tecnología está disponible como un conjunto de API de JavaScript para todos los principales navegadores y una biblioteca para clientes nativos como Android e iOS Aplications.
WEBRTC es diferente de WebSockets y GRPC de manera fundamental, y es que una vez que se establece una conexión, los datos pueden (en algunas circunstancias) transmitirse directamente entre navegadores y dispositivos en tiempo real sin tocar el servidor.
Esto reduce la latencia y hace que WebRTC sea excelente para audio, video o intercambio de pantalla, donde la baja latencia es importante y se deben enviar muchos datos.
Motivación de Webrtc
WebRTC tiene la intención de estandarizar cómo los medios, como el audio y el video, se comunican sobre el cable y lograr esto convenientemente con una API simple de usar.
Otras soluciones, como WebSockets, permiten transmitir cualquier datos entre dos pares; Sin embargo, estos datos deben transmitirse a través de un proxy o servidor. Confiar en otro servidor agrega latencia, ya que todo lo que se envía a través de TI debe ser visto, procesado y descifrado. Hay un hombre medio entre los dos compañeros. Para la transmisión de video o incluso el chat en tiempo real, esta latencia es indeseable.
Los navegadores también son más poderosos que hace unos años. Los navegadores tienen acceso a la cámara web y al micrófono, lo que requiere una API incorporada y una manera fácil de transmitir esta rica información. WebRTC tiene la intención de simplificar todo este proceso y exponer una API fácil de usar disponible en los navegadores.
El problema con WebRTC
La motivación se define, y parece que WebRTC es una solución mágica que permite una comunicación más rápida entre dos compañeros. Pero desafortunadamente hay algunos problemas.
El primer problema es que establecer una conexión entre pares no es simple: Internet es complicado y hay muchos enrutadores, proxies y firewalls entre Alice en California y Ben en Sudáfrica. Y en algunas circunstancias, puede que no sea posible tener una línea directa entre dos pares. Es posible que una conexión entre dos pares deba evitar un firewall que evite las conexiones abiertas, potencialmente no puede tener una dirección IP pública, o el enrutador puede no permitir una conexión directa entre pares.
El segundo problema es que debe haber una forma para que dos compañeros se descubran entre sí y determinen la ruta óptima en la que puede ocurrir la comunicación. Esto requiere que se comparta cierta información entre los dos clientes antes de saber cómo comunicarse mejor entre sí, y una forma común de compartir esta información es mediante el uso de WebSockets.
Que es un poco divertido. Un Http La conexión se actualiza a un Websocket conexión solo para compartir información para establecer un Webrtc conexión.
Si realmente desea apreciar lo que hace WebRTC y su complejidad, deberá familiarizarse con algunos términos potencialmente desconocidos: Nat, Stun, Turn, Ice, SDP y Signating.
¿Cómo funciona WebRTC??
En la descripción general anterior, describimos la motivación de WebRTC, que describe la idea básica de cómo funciona. Esta sección se sumergirá en algunos de los temas de nivel inferior que necesita comprender para comprender WebRTC por completo.
Traducción de direcciones de red (NAT)
Comprender qué es Nat y cómo funciona es esencial para comprender WebRTC.
Se utiliza un NAT para darle a su dispositivo (computadora portátil o teléfono celular) una dirección IP pública; Esto es importante porque queremos establecer una conexión entre dos pares que probablemente estén detrás de un enrutador. Un enrutador tendrá una dirección IP pública, y cada dispositivo conectado al enrutador tendrá una dirección IP privada.
Estos dispositivos no’t directamente expuesto a Internet. En cambio, todo el tráfico pasa por el enrutador, que se comunica con el mundo exterior. Cuando solicita recursos desde un servidor remoto, el enrutador es responsable de “enrutamiento” la solicitud de su máquina local a ese servidor y enrutar la respuesta del servidor de regreso a su máquina local.
Estas solicitudes se traducen desde el dispositivo’S Dirección IP privada al enrutador’S Public IP con un puerto único, que luego se almacena en una mesa NAT. De esta manera, no es necesario tener una IP pública única para cada dispositivo en una red local.
La imagen de arriba es un ejemplo simplista de cómo se vería una tabla nat. Dejar’S finge el dispositivo local, con una IP privada de 192.168.1.50, solicita la dirección pública 82.88.31.26:80 Para algunos datos.
El dispositivo local logra primero que envía la solicitud al enrutador, que enruta la solicitud al dispositivo remoto. El enrutador luego le dice al dispositivo remoto que envíe la respuesta a su dirección IP externa, con un puerto único, que en este ejemplo es 86.88.71.25: 8830.
Este puerto único es importante, ya que permitirá al enrutador determinar qué dispositivo local hizo la solicitud. Toda esta información se almacena en una tabla NAT. Una vez que el enrutador obtiene la respuesta, puede realizar una búsqueda y decidir a qué dispositivo local se debe reenviar la respuesta.
Esto es bastante simple de entender cuando tenemos un par de solicitudes/respuesta normal: un dispositivo y un servidor. Pero, ¿qué sucede si otro dispositivo externo con una dirección IP completamente diferente decide enviar paquetes a la dirección IP externa del enrutador en el mismo puerto que se usó anteriormente?? Si el enrutador lo reenvía al dispositivo local que está asignado a ese número de puerto?
Esta decisión depende de qué traducción NAT el enrutador usa y, en última instancia, determina si se puede establecer una conexión entre pares. Dependiendo del enrutador que use, implementará una traducción NAT diferente. Hay cuatro métodos diferentes de traducción de NAT:
- Uno a uno nat
- Dirección restringida NAT
- NAT restringido de puerto
- Nat simétrico
Uno a uno nat: Mapea una dirección IP externa y puerto (generalmente público) a una dirección IP interna y puerto (generalmente privado). En el ejemplo anterior, si el enrutador recibe una respuesta en el puerto 8830 y IP externa 86.88.71.25, lo reenviará al dispositivo local 192.168.1.50, Como ese es el dispositivo local que realizó la solicitud (información recuperada de la tabla NAT). Al enrutador no le importa la IP de destino o de dónde se originó la respuesta. Si se’S en un puerto externo en particular va a ese dispositivo local.
Dirección restringida NAT: Un dispositivo remoto puede enviar un paquete al dispositivo local solo si el dispositivo local había enviado previamente un paquete a la dirección IP remota. En resumen, solo lo permitimos si nos hemos comunicado con este host antes. En el ejemplo anterior, solo permita paquetes de 86.88.71.25.
NAT restringido de puerto: Lo mismo que la dirección restringida NAT, pero la restricción también incluye números de puerto. El dispositivo remoto solo puede enviar un paquete al dispositivo interno si el dispositivo interno había enviado previamente un paquete a la dirección IP X y el puerto P. En el ejemplo anterior, solo permita de 86.88.71.25 y puerto 80.
Nat simétrico: El mas restrictivo. Para esto el IP externa, puerto externo, IP de destino, y Puerto de destino Todos tienen que igualar lo que está presente en la tabla NAT. Esto significa que los paquetes solo se pueden enviar a un puerto específico de un dispositivo local si ese dispositivo era el que solicitaba la IP y el puerto de destino.
WebRTC no funciona sobre NAT simétrico, y para entender por qué necesitamos entender qué es un servidor de Stun.
Utilidades de transversal de sesión para NAT (Stun)
Stun es un protocolo para decirle su dirección/puerto IP público a través de NAT y determinar cualquier restricción en su enrutador que evite una conexión directa con un par. Un servidor de aturdimiento es un mecanismo para que los clientes descubran la presencia de un NAT, así como el tipo de NAT, y que determine la dirección IP externa del NAT y la asignación de puertos.
El propósito de una solicitud de aturdimiento es determinar su presencia pública para que esta presencia pública pueda comunicarse con otra persona para que pueda conectarse con usted; esta comunicación se conoce como señalización, que discutiremos más más adelante.
Funciona para cara a cara, dirección restringida, y NAT restringido de puerto. Pero no funciona para nat simétrico. Porque cuando solicita el servidor STUN para su información pública, ese par de comunicación se creó especialmente para el cliente que realiza la solicitud. No es posible involucrar a otro par usando NAT simétrico: la comunicación sobre el puerto del dispositivo local está restringida al servidor de aturdimiento.
Los servidores de Stun son livianos y baratos de mantener. Hay servidores públicos de aturdimiento que se pueden consultar de forma gratuita.
La imagen a continuación ilustra cuándo funciona el aturdimiento y cuándo se puede establecer una conexión entre pares.
Por otro lado, si no se puede establecer una conexión entre pares, por ejemplo, cuando un par está detrás de un NAT simétrico, entonces la conexión final en el paso tres no se permitirá. Como la conexión inicial se estableció con el servidor STUN, y ningún otro par puede usar esa información de conexión.
En un evento como este en el que no se puede establecer una conexión directa, necesitamos hacer uso de un servidor de giro.
Transversal usando relés alrededor de Nat (giro)
El giro es un protocolo para transmitir el tráfico de red cuando no se puede establecer una conexión directa entre dos pares. Por ejemplo, si un par está detrás de un NAT simétrico, se necesita un servidor dedicado para transmitir el tráfico entre pares. En ese caso, crearía una conexión con un servidor de giro y le diría a todos los compañeros que envíen paquetes al servidor, que luego se le reenviará a usted.
Esto viene con sobrecarga, y un servidor de giro puede ser costoso de mantener y ejecutar.
La siguiente imagen ilustra cómo se usa un servidor de turnos para transmitir mensajes entre dos o más pares.
Establecimiento de conectividad interactiva (ICE)
ICE utiliza una combinación de los protocolos de aturdimiento y giro para proporcionar un mecanismo para que los hosts descubran las direcciones IP públicas de los demás y establezcan una conexión directa. Si una conexión directa es imposible, ICE usará el giro para establecer una conexión de relé entre los dos hosts.
Todas estas posibles formas de establecer potencialmente una conexión se llaman candidatos de hielo. Todas las direcciones recolectadas se envían al par remoto a través de SDP, que exploraremos a continuación. WebRTC utiliza esta información en cada cliente para determinar la mejor manera de conectarse a otro par. Puede ser que ambos compañeros estén en el mismo NAT y que se pueda establecer una conexión local, o puede ser que ambos compañeros estén detrás de NAT simétrico y requiere un relé que use un servidor Turn.
Protocolo de descripción de la sesión (SDP)
SDP es esencialmente un formato de datos para describir las sesiones de medios para el anuncio de la sesión, la invitación de sesión y otras formas de inicio de la sesión. Es un estándar para describir el contenido multimedia para la conexión, como resolución, formatos, códecs y cifrado.
Es importante destacar que’S también se usa para describir a los candidatos de hielo y otras opciones de redes. Cuando Peer A quiere conectarse a la pareja B, deben compartir la información de SDP para conectarse. La forma en que se comparte este SDP es completamente existente: esto se conoce como señalización y lo exploraremos a continuación.
Señalización: establecer una conexión
La señalización es el proceso de enviar información de control entre dos dispositivos para determinar los protocolos de comunicación, canales, códecs y formatos de medios, y método de transferencia de datos, así como cualquier información de enrutamiento requerida. Lo más importante que debe saber sobre el proceso de señalización para WEBRTC: no se define en la especificación.
Las conexiones entre pares se ocupan de la conexión de dos aplicaciones en diferentes computadoras. Se establece una conexión a través de un proceso de descubrimiento y negociación llamado señalización.
Una advertencia importante es que WebRTC no tiene señalización integrada como parte de la especificación, ya que no es posible que dos dispositivos se contacten directamente entre sí, lo que exploramos en detalle anteriormente. Para que dos pares se conecten con WEBRTC, requieren los datos SDP de los demás.
Como tal, depende de usted, como desarrollador, establecer una forma para que dos dispositivos compartan esta información. Una opción popular es WebSockets, o la información de señalización se puede enviar de un lado a otro por correo electrónico o entregarse a pie e ingresar manualmente para establecer una conexión.
Una vez que se comparte esta información, tiene todo lo que necesita para dos pares para establecer una conexión WEBRTC, puede ser una conexión directa, o puede ser a través de un servidor de giro.
¿Cuándo deberías usar WebRTC??
Incluso puede preguntar: ¿por qué debería usar WebRTC?? Parece complicado de entender y aún más complicado establecer.
Es complicado establecer, pero hay muchos beneficios:
- La API es fácil de usar y está disponible directamente en su navegador.
- Tiene un buen rendimiento, lo que permite transmitir contenido de alto ancho de banda, como video o audio.
- Las características más avanzadas, como el intercambio de pantalla y el intercambio de archivos se pueden implementar fácilmente.
- Admite la conexión entre pares con una latencia reducida.
- Código abierto y abierto.
- Sin señalización incorporada.
- Necesitas mantener servidores aturdidos y giros.
- Para conexiones grupales (como una videollamada grupal) puede ser necesaria una SFU.
- Complicado de configurar y comprender.
Que deberías elegir?
El protocolo que elija dependerá de sus necesidades específicas.
Http: Con HTTP/2, ahora es posible tener una comunicación bidireccional entre un cliente y un servidor. Dependiendo de su aplicación, es posible que no necesite una comunicación dúplex completa y algo como SSE será más que suficiente. También descubrimos en este artículo que WebSockets y GRPC dependen de HTTP, mientras que WEBRTC requiere algún otro canal para la señalización. Él’S vale la pena explorar primero si HTTP resuelve las necesidades de su aplicación antes de profundizar en estos otros protocolos.
Redes web son los más adecuados para aplicaciones en tiempo real que necesitan comunicación bidireccional, como aplicaciones de chat. También son relativamente fáciles de configurar y usar. Sin embargo, los WebSockets no son tan eficientes como GRPC o WEBRTC, y no son adecuados para aplicaciones que necesitan enviar muchos datos.
GRPC es un protocolo más eficiente que WebSockets, y es más adecuado para aplicaciones que necesitan enviar muchos datos. Sin embargo, GRPC es más complicado de configurar y usar que WebSockets. Si necesita hacer muchas llamadas de API pequeñas, GRPC es una buena opción. O, cuando implementa microservicios con varios lenguajes de programación que necesitan comunicarse, luego GRPC’s Los datos estructurados y la generación de código serializados le ahorrarán mucho tiempo. Él’también vale la pena señalar que puedes’T Usar fácilmente GRPC del navegador. Para eso, necesita un proxy dedicado en su backend que traduzca llamadas – ver Grpc -Web.
Webrtc es el protocolo más eficiente para la comunicación en tiempo real con baja latencia entre navegadores y dispositivos, y es muy adecuado para aplicaciones que necesitan enviar muchos datos. WebRTC también proporciona una API fácil de usar directamente disponible en el navegador, lo que facilita la compartir su cámara, audio, pantalla u otros archivos. Sin embargo, WebRTC puede ser complicado de configurar y usar, ya que requiere que realice la señalización y mantenga un servidor de giro y aturdimiento.
Conclusión
El futuro verá más protocolos, cambios y mejoras adicionales. HTTP/3 ya está lanzado y también hay un nuevo protocolo de comunicación llamado WebTransport, un potencial de reemplazo para WebSockets.
Esperamos que haya encontrado este artículo útil y que le ayude a tomar una decisión informada. Si desea continuar la discusión, comuníquese con nosotros en Twitter o LinkedIn.
WebRTC vs HLS: comparación entre los protocolos de transmisión
Esta publicación de blog compara WebRTC y HLS, dos de los protocolos de transmisión más populares. Examina los pros y los contras de cada protocolo y explora sus aplicaciones. Además, la publicación proporciona una descripción general de la cual es mejor para la transmisión, lo que permite a los lectores seleccionar la tecnología adecuada para sus necesidades.
Ashik TS
22 de febrero de 2023
En la era digital actual, los protocolos de transmisión se han vuelto esenciales para consumir y compartir medios. Desde transmisiones en vivo hasta video a pedido, los protocolos de transmisión nos han permitido acceder a contenido en cualquier lugar, en cualquier momento. Pero con tantas opciones disponibles, saber cuál es mejor para sus necesidades puede llevar tiempo y esfuerzo. En este artículo, veremos dos de los protocolos de transmisión más populares: WebRTC y HLS, los compararemos y lo ayudaremos a tomar una decisión informada.
¿Qué es WebRTC??
WebRTC es un protocolo de código abierto y de código abierto desarrollado por el W3C. Habilita la comunicación en tiempo real, como las llamadas de voz y video, conferencias en línea y chat. WebRTC se ha vuelto prominente recientemente debido a su capacidad para ofrecer transmisiones de audio y videos y audio de baja latencia y alta calidad.
Aplicaciones de WebRTC
Estos son algunos de los casos de uso empleados con más frecuencia de WEBRTC:
- Voz y videollamadas: Uno de los casos de uso más populares para WebRTC es las llamadas de voz y videos. Permite la comunicación en tiempo real y de baja latencia entre dos o más personas. Las empresas utilizan ampliamente esta función para la comunicación interna, la colaboración y las aplicaciones orientadas al consumidor para redes sociales y citas en línea.
- Conferencias en línea: Otro caso de uso popular para WebRTC es la conferencia en línea. Permite a varios usuarios unirse a una sala de reuniones virtual e interactuar entre sí a través de video y audio, así como compartir pantallas y documentos. Las empresas utilizan ampliamente esta característica para reuniones y presentaciones remotas, así como por instituciones educativas para clases y conferencias en línea.
- Charlar: WebRTC también permite la comunicación basada en texto en tiempo real a través del chat. Esta característica se puede integrar en varias aplicaciones y plataformas, como redes sociales, juegos en línea y atención al cliente. Permite la comunicación instantánea y se puede utilizar para mejorar la experiencia del usuario en varios contextos.
¿Qué es HLS??
HLS (transmisión en vivo HTTP) es un protocolo de transmisión de tasa de bits adaptable desarrollado por Apple. Se usa ampliamente para transmisión en vivo en dispositivos móviles y navegadores de escritorio. HLS está diseñado para funcionar con el protocolo HTTP y se puede integrar fácilmente en la infraestructura basada en HTTP existente.
Aplicaciones de HLS
Estas son algunas de las formas más comunes en que HLS se usa en la actualidad de hoy:
- Transmisión en vivo: HLS es ampliamente utilizado para eventos de transmisión en vivo, como deportes, conciertos y transmisiones de noticias. El protocolo está diseñado para manejar el alto tráfico y proporcionar una experiencia de transmisión suave para los espectadores. La función de tasa de bits adaptativa permite que la transmisión se ajuste a la conexión a Internet del espectador, proporcionando una mejor experiencia de visualización.
- Video-on-demand (VOD): HLS también se usa comúnmente para contenido de video a pedido (VOD), como películas, programas de televisión y video tutoriales. El protocolo permite una fácil integración con los sistemas de gestión de contenido y una experiencia de transmisión suave para el espectador con tasa de bits adaptativa.
- IPTV y OTT: HLS también se usa en servicios IPTV y exagerados (OTT), como la transmisión de servicios de televisión y video. La capacidad del protocolo para manejar el alto tráfico y proporcionar una experiencia de transmisión suave lo convierte en una opción popular para estas aplicaciones.
- Transmisión móvil: HLS también es popular para la transmisión móvil, ya que es compatible con las plataformas de iOS y Android.
- Comunicaciones empresariales: HLS se utiliza en plataformas de comunicación empresarial que permiten a los empleados transmitir videos, compartir pantallas y realizar llamadas de audio/video, ya que proporciona una experiencia de transmisión sin problemas y es compatible con la mayoría de los dispositivos.
WebRTC vs HLS: una comparación detallada
Característica | Webrtc | HLS |
---|---|---|
Soporte del navegador | Chrome, Firefox, Safari, Edge (con un complemento) | Safari, Chrome, Edge, Firefox (con un complemento) |
Soporte del dispositivo | Windows, MacOS, Linux, iOS, Android | iOS, Android, macOS, Windows |
Soporte de códec | VP8, VP9, H.264, H.265 | H.264, H.265 |
Latencia | Bajo | Alto |
Seguridad | Alto | Medio |
Calidad de video | Alto | Alto |
Método de entrega | De igual a igual | Basado en servidor |
Escalabilidad | Alto | Alto |
Compatibilidad | Limitado | Ancho |
Al decidir qué protocolo usar, es importante considerar factores como la latencia, la seguridad, la calidad del video, el método de entrega, la escalabilidad y la compatibilidad.
Latencia
Cuando se trata de latencia, WebRTC tiene una clara ventaja sobre HLS. WebRTC utiliza la comunicación en tiempo real, lo que significa que el video se entrega instantáneamente al espectador. Por otro lado, HLS utiliza un mecanismo de amortiguación, que retrasa la entrega de video. Dependiendo de las condiciones de la red, este retraso puede ser de unos segundos a unos minutos. Estos elementos hacen que WebRTC sea más adecuado para casos de uso que requieren baja latencia, como chats de video en vivo y juegos en línea.
Seguridad
Tanto WebRTC como HLS usan el cifrado para proteger las transmisiones de video. Sin embargo, el nivel de seguridad proporcionado por cada protocolo es diferente. WebRTC utiliza el Protocolo de transporte seguro en tiempo real (SRTP) para cifrar la transmisión de video, que se considera uno de los métodos de cifrado más seguros. Por otro lado, HLS utiliza el protocolo HTTP Secure (HTTPS) para cifrar la transmisión de video. Si bien HTTPS se considera seguro, SRTP es menos seguro. Debido a estas razones, WebRTC es más adecuado para casos de uso que requieren altos niveles de seguridad, como transacciones financieras y comunicación gubernamental.
Calidad de video
Tanto WebRTC como HLS son capaces de entregar video de alta calidad. Sin embargo, la calidad del video entregada por cada protocolo puede variar según las condiciones de la red. WebRTC utiliza la transmisión de tasa de bits adaptativa, que ajusta la calidad del video en tiempo real en función de las condiciones de red del espectador. Esto significa que la calidad del video será alta incluso en redes de bajo ancho de banda. Por otro lado, HLS utiliza un mecanismo de entrega de video pre-segmentado, que puede conducir a la amortiguación y tartamudeos en redes de bajo ancho de banda. Como resultado, WebRTC es más adecuado para casos de uso que requieren videos de alta calidad en redes de bajo ancho de banda.
Método de entrega
WebRTC y HLS utilizan diferentes métodos de entrega para transmitir video. WebRTC utiliza un método de entrega de igual a igual (P2P), lo que significa que el video se entrega directamente de un espectador a otro. Esto reduce la carga del servidor y aumenta la escalabilidad de la transmisión de video. Por otro lado, HLS utiliza un método de entrega de cliente cliente, lo que significa que el video se entrega desde el servidor al espectador. Esto puede conducir a problemas de escalabilidad, especialmente durante los tiempos de tráfico máximos. Como resultado, WebRTC es más adecuado para casos de uso que requieren altas escalabilidades, como eventos en vivo y juegos en línea.
Escalabilidad
WebRTC y HLS tienen diferentes características de escalabilidad. WebRTC utiliza un método de entrega P2P, que reduce la carga del servidor y aumenta la escalabilidad de la transmisión de video. Por otro lado, HLS utiliza un método de entrega de cliente cliente, que puede conducir a problemas de escalabilidad, especialmente durante los tiempos de tráfico máximos. Como resultado, WebRTC es más adecuado para casos de uso que requieren altas escalabilidades, como eventos en vivo y juegos en línea.
Compatibilidad
WebRTC y HLS tienen diferentes características de compatibilidad. WebRTC es compatible con la mayoría de los navegadores modernos, incluidos Chrome, Firefox y Safari. Sin embargo, no es compatible con Internet Explorer y Edge. Por otro lado, HLS es compatible con la mayoría de los navegadores modernos, incluidos Chrome, Firefox, Safari, Internet Explorer y Edge. Debido a esto, HLS es más adecuado para casos de uso que requieren compatibilidad con una amplia gama de navegadores y dispositivos.
WebRTC vs HLS: que es mejor?
Webrtc es una gran opción para aplicaciones de transmisión en tiempo real de baja latencia. Es perfecto para casos de uso como llamadas de voz y video, conferencias en línea y chat. Por otro lado, HLS es una excelente opción para transmitir video en vivo a una gran audiencia. Es particularmente adecuado para casos de uso como la transmisión de deportes en vivo, conciertos y otros eventos que requieren alta escalabilidad. La capacidad de HLS para adaptarse a diferentes condiciones de red lo convierte en una opción popular para transmitir contenido a los espectadores en varios dispositivos y redes.
Además, HLS tiene un mejor soporte para proteger los derechos de autor del contenido, por lo que es una opción preferida para transmitir contenido premium. Cuando se trata de compatibilidad, HLS tiene una ligera ventaja sobre WebRTC. HLS es ampliamente compatible, por lo que es una opción más versátil para transmitir contenido a un público más amplio. Sin embargo, esto tiene costa de una latencia ligeramente mayor.
Si su enfoque principal es la transmisión en tiempo real y de baja latencia, WebRTC podría ser su mejor opción. De lo contrario, si su enfoque principal está en la escalabilidad y la compatibilidad, entonces HLS podría ser la mejor opción.
Conclusión
En conclusión, tanto WebRTC como HLS tienen sus propias características y casos de uso únicos que los hacen adecuados para diferentes tipos de transmisión. WebRTC es el más adecuado para la baja latencia, la comunicación en tiempo real, como las llamadas de voz y video, conferencias y chat. Por otro lado, HLS es el más adecuado para la transmisión de alta calidad de videos pregrabados en una amplia gama de dispositivos.
Preguntas frecuentes
1. ¿WebRTC usa TCP o UDP??
WebRTC utiliza TCP y UDP dependiendo del tipo de datos que se transmiten. Utiliza TCP para controlar mensajes y UDP para la transmisión de medios.
2. ¿YouTube usa HLS??
Sí, YouTube usa HLS (transmisión en vivo HTTP) como uno de sus protocolos de transmisión para entregar videos a los espectadores.
3. Es WebRTC solo para navegadores?
WebRTC es principalmente una tecnología basada en el navegador, pero también se puede utilizar en aplicaciones nativas a través de bibliotecas de WebRTC.
4. ¿Netflix usa WebRTC??
No, Netflix no usa WebRTC para la transmisión. Utilizan su propia tecnología patentada llamada transmisión adaptativa a través de HTTP (ASOH) que se basa en HTTP Live Streaming (HLS).