Webrtc usa http

Abrir uma nova conexão TCP para cada solicitação se tornou um problema à medida que a web evoluiu. Começamos a criar aplicativos completos em vez de páginas simples da web, e o número de mídia e arquivos que um navegador necessário para recuperar se tornou mais. Imagine um aplicativo web típico que requer um arquivo HTML, CSS e JavaScript, além de várias imagens e outros ativos. Para cada arquivo, uma nova conexão teve que ser feita.

WebRTC vs Streaming HTTP

А вззжжно, арра эpthэээрной пчччээлююююююяяяюю sentido аююэээth а а edade троной пчччч п п пччч пччччiliar.

-Discutir-Webrtc

Eu tenho experimentado protocolos de streaming WebRTC e HTTP (HLS, MPEG-DASH) para transmissão de vídeo ao vivo há alguns dias e descobri que, embora o WebRTC alcance as subcondas latências, os protocolos de streaming HTTP sempre têm latências múltiplas de segurança. Portanto, tenho algumas perguntas relacionadas ao streaming webrtc vs http.

1. Como o WebRTC é capaz de alcançar subcondas latências em comparação com os protocolos de streaming http?

O WebRTC é capaz de alcançar subcondas latências em comparação com os protocolos de streaming HTTP devido aos seus recursos de comunicação em tempo real (RTC). O WebRTC é construído para fornecer a aplicativos transmissão instantânea de vídeo, áudio e outros dados entre pares. Isso permite uma transmissão virtualmente instantânea de conteúdo, resultando em subestas latências.

2. Se o WebRTC já fornece streaming de vídeo de baixa latência, por que existe um esforço para unificar protocolos de streaming HTTP sob o padrão MPEG-DASH?

O esforço para unificar os protocolos de streaming HTTP sob o padrão MPEG-DASH é impulsionado pela necessidade de uma abordagem padronizada para o streaming baseado em HTTP. Embora o WebRTC forneça streaming de vídeo de baixa latência, não é adequado para todos os casos de uso e pode não ser compatível com todos os dispositivos e software. Ao unificar protocolos de streaming HTTP sob o padrão MPEG-DASH, fica mais fácil para os provedores de conteúdo fornecer streaming de vídeo de alta qualidade em diferentes plataformas e dispositivos, garantindo uma experiência de visualização consistente para usuários.

3. Como o WebRTC se compara ao RTMP? (Eu não explorei o RTMP até agora, mas quero saber se é possível obter latências subsendos com o RTMP)

WebRTC e RTMP são ambos protocolos usados ​​para a mídia de streaming, mas eles têm algumas diferenças em termos de latência e compatibilidade. O WebRTC foi projetado para comunicação em tempo real e pode obter latências de subsendos, tornando-o adequado para aplicações que requerem transmissão instantânea. Por outro lado, o RTMP (protocolo de mensagens em tempo real) é um protocolo usado principalmente para transmitir áudio, vídeo e dados entre um codificador e um servidor de streaming. Embora o RTMP possa fornecer streaming de baixa latência, a obtenção de latências de subsendos pode depender de vários fatores, como condições de rede e configurações de servidor.

Um estudo comparativo entre o WebRTC e o streaming baseado em HTTP

Por um longo tempo, a redução da latência de streaming tem sido um tópico popular. Sabe-se que as latências de dezenas de segundos, e até um minuto, ocorrem com o streaming baseado em HTTP no passado. Com latência tradicional de transmissão nos segundos de um dígito e soluções emergentes como Serviços de Desenvolvimento WebRTC, A questão é qual abordagem de adotar. O streaming WebRTC é capaz de entregar vídeo não apenas em subsendos, mas em menos de 500 milissegundos. Atualmente, é a tecnologia de streaming de menor latência disponível, permitindo uma transmissão praticamente instantânea.

Neste guia bacana, veremos como o webrtc funciona e compará -lo com http da perspectiva de um Serviço de streaming de vídeo. Vamos começar!

Streaming baseado em HTTP e WebRTC


Um rápido resumo do streaming baseado em HTTP e webrtc

Protocolos baseados em HTTP são servidores da web tecnicamente regulares, enviando downloads progressivos. Eles usam streaming de taxa de bits adaptável para fornecer a maior qualidade de vídeo possível e experiência de visualização, independentemente da conexão, software ou dispositivo. Alguns dos protocolos baseados em HTTP mais comuns disponíveis incluem mpeg-dash, maçã’S HLS, Adobe HDs e Microsoft Smooth Streaming.

O WebRTC é um protocolo robusto que é apoiado por excelentes ferramentas e suporte generalizado da indústria. Foi criado para fornecer aos aplicativos recursos de comunicação em tempo real (RTC), permitindo que vídeo, áudio ou qualquer outro tipo de dados sejam transferidos entre pares. Esta é uma distinção chave entre os dois quando comparada ao streaming baseado em HTTP, que é orientado ao cliente-servidor.

UDP vs. TCP

Os componentes básicos do conjunto de protocolos da Internet, o Protocolo de Datagrama do Usuário (UDP) e o Protocolo de Controle de Transmissão (TCP), ambos residem na camada de transporte.

A principal distinção entre UDP e TCP é que o TCP requer um aperto de mão de três vias ao transmitir dados. O iniciador (cliente) solicita que o aceitador (servidor) estabeleça uma conexão, o aceitador responde e o iniciador reconhece a resposta e mantém uma sessão entre as duas extremidades. Portanto, o TCP é extremamente credível e pode lidar com a perda de pacotes e pedidos.

UDP, por outro lado, não’T requer um aperto de mão para começar. Ele transfere dados independentemente das restrições de largura de banda, o que o torna mais rápido e arriscado. Como o UDP não suporta retransmissões, pedidos de pacotes ou verificação de erros, um soluço de rede tem o potencial de contaminar os dados em trânsito.

Protocolos como o WebRTC costumam usar UDP, enquanto os protocolos baseados em HTTP usam TCP.

Como o WebRTC se empilham versus o streaming baseado em HTTP?

  • Que tipo de latência você está procurando?
  • Qual será o tamanho do público?
  • Qual é a quantidade máxima que você está disposto a gastar?

Latência

As respostas para as perguntas de latência dependem da faixa de latência que você está buscando.

O novo e aprimorado HLS, como LL-HLS e LL-DASH, tem uma latência de 3 segundos ou menos. Isso ainda é considerado rápido e será suficiente para a maioria dos casos de uso de baixa latência. O WebRTC, por outro lado, continua sendo a solução mais rápida se o seu caso de uso exigir streaming em tempo real. Já que é um protocolo UDP desenvolvido para se adaptar totalmente à Internet moderna. Ele suporta 500ms de latência em tempo real.

O WebRTC foi projetado para fornecer comunicação bidirecional e em tempo real. Ao contrário do HLS, que é baseado no TCP, o WebRTC é baseado no UDP. Isso significa que o WebRTC pode começar sem o cliente e o servidor trocando qualquer informação do aperto de mão. Como resultado, o WebRTC é mais rápido, mas também o torna mais suscetível a flutuações de rede.

WebRTC é o protocolo a ser empregado se sua solução exigir streaming ponto a ponto em tempo real. No entanto, se você precisar aumentar seu público acima de 50 pessoas, precisará reconsiderar sua estratégia.

Comparado ao HLS, a escala do WebRTC é substancialmente mais difícil. No entanto, isso pode ser resolvido com um fluxo de trabalho híbrido. Sua escolha será determinada pelo seu caso de uso e tamanho do público -alvo.

Quando se trata de alcançar um grande público, protocolos baseados em HTTP saem no topo.

Webrtc usa http

Abrir uma nova conexão TCP para cada solicitação se tornou um problema à medida que a web evoluiu. Começamos a criar aplicativos completos em vez de páginas simples da web, e o número de mídia e arquivos que um navegador necessário para recuperar se tornou mais. Imagine um aplicativo web típico que requer um arquivo HTML, CSS e JavaScript, além de várias imagens e outros ativos. Para cada arquivo, uma nova conexão teve que ser feita.

WebRTC vs Streaming HTTP

А вззжжно, арра эpthэээрной пчччээлююююююяяяюю sentido аююэээth а а edade троной пчччч п п пччч пччччiliar.

-Discutir-Webrtc

Eu tenho experimentado protocolos de streaming WebRTC e HTTP (HLS, MPEG-DASH) para transmissão de vídeo ao vivo há alguns dias e descobri que, embora o WebRTC alcance as subcondas latências, os protocolos de streaming HTTP sempre têm latências múltiplas de segurança. Portanto, tenho algumas perguntas relacionadas ao streaming webrtc vs http.

1. Como o WebRTC é capaz de alcançar subcondas latências em comparação com os protocolos de streaming http?

2. Se o WebRTC já fornece streaming de vídeo de baixa latência, por que existe um esforço para unificar protocolos de streaming HTTP sob o padrão MPEG-DASH?
3. Como o WebRTC se compara ao RTMP? (Eu não explorei o RTMP até agora, mas quero saber se é possível obter latências subsendos com o RTMP)

Um estudo comparativo entre o WebRTC e o streaming baseado em HTTP

Por um longo tempo, a redução da latência de streaming tem sido um tópico popular. Sabe-se que as latências de dezenas de segundos, e até um minuto, ocorrem com o streaming baseado em HTTP no passado. Com latência tradicional de transmissão nos segundos de um dígito e soluções emergentes como Serviços de Desenvolvimento WebRTC , A questão é qual abordagem de adotar. O streaming WebRTC é capaz de entregar vídeo não apenas em subsendos, mas em menos de 500 milissegundos. Atualmente, é a tecnologia de streaming de menor latência disponível, permitindo uma transmissão praticamente instantânea.

Neste guia bacana, veremos como o webrtc funciona e compará -lo com http da perspectiva de um Serviço de streaming de vídeo . Vamos começar!

Streaming baseado em HTTP e WebRTC


Um rápido resumo do streaming baseado em HTTP e webrtc

Protocolos baseados em HTTP são servidores da web tecnicamente regulares, enviando downloads progressivos. Eles usam streaming de taxa de bits adaptável para fornecer a maior qualidade de vídeo possível e experiência de visualização, independentemente da conexão, software ou dispositivo. Alguns dos protocolos baseados em HTTP mais comuns disponíveis incluem mpeg-dash, maçã’S HLS, Adobe HDs e Microsoft Smooth Streaming.

O WebRTC é um protocolo robusto que é apoiado por excelentes ferramentas e suporte generalizado da indústria. Foi criado para fornecer aos aplicativos recursos de comunicação em tempo real (RTC), permitindo que vídeo, áudio ou qualquer outro tipo de dados sejam transferidos entre pares. Esta é uma distinção chave entre os dois quando comparada ao streaming baseado em HTTP, que é orientado ao cliente-servidor.

UDP vs. TCP

Os componentes básicos do conjunto de protocolos da Internet, o Protocolo de Datagrama do Usuário (UDP) e o Protocolo de Controle de Transmissão (TCP), ambos residem na camada de transporte.

A principal distinção entre UDP e TCP é que o TCP requer um aperto de mão de três vias ao transmitir dados. O iniciador (cliente) solicita que o aceitador (servidor) estabeleça uma conexão, o aceitador responde e o iniciador reconhece a resposta e mantém uma sessão entre as duas extremidades. Portanto, o TCP é extremamente credível e pode lidar com a perda de pacotes e pedidos.

UDP, por outro lado, não’T requer um aperto de mão para começar. Ele transfere dados independentemente das restrições de largura de banda, o que o torna mais rápido e arriscado. Como o UDP não suporta retransmissões, pedidos de pacotes ou verificação de erros, um soluço de rede tem o potencial de contaminar os dados em trânsito.

Protocolos como o WebRTC costumam usar UDP, enquanto os protocolos baseados em HTTP usam TCP.

Como o WebRTC se empilham versus o streaming baseado em HTTP?

  • Que tipo de latência você está procurando?
  • Qual será o tamanho do público?
  • Qual é a quantidade máxima que você está disposto a gastar?

Latência

As respostas para as perguntas de latência dependem da faixa de latência que você está buscando.

O novo e aprimorado HLS, como LL-HLS e LL-DASH, tem uma latência de 3 segundos ou menos. Isso ainda é considerado rápido e será suficiente para a maioria dos casos de uso de baixa latência. O WebRTC, por outro lado, continua sendo a solução mais rápida se o seu caso de uso exigir streaming em tempo real. Já que é um protocolo UDP desenvolvido para se adaptar totalmente à Internet moderna. Ele suporta 500ms de latência em tempo real.

O WebRTC foi projetado para fornecer comunicação bidirecional e em tempo real. Ao contrário do HLS, que é baseado no TCP, o WebRTC é baseado no UDP. Isso significa que o WebRTC pode começar sem o cliente e o servidor trocando qualquer informação do aperto de mão. Como resultado, o WebRTC é mais rápido, mas também o torna mais suscetível a flutuações de rede.

WebRTC é o protocolo a ser empregado se sua solução exigir streaming ponto a ponto em tempo real. No entanto, se você precisar aumentar seu público acima de 50 pessoas, precisará reconsiderar sua estratégia.

Comparado ao HLS, a escala do WebRTC é substancialmente mais difícil. No entanto, isso pode ser resolvido com um fluxo de trabalho híbrido. Sua escolha será determinada pelo seu caso de uso e tamanho do público -alvo.

Quando se trata de alcançar um grande público, protocolos baseados em HTTP saem no topo. Enquanto “CDNs” Para o webrtc existe, o custo é frequentemente proibitivo.

Custo

WebRTC é um protocolo gratuito e de código aberto. Mas lembre -se de como conversamos sobre a escala do WebRTC? É totalmente possível, e funciona efetivamente em muitos casos de uso – mas não é barato. Se você não precisa transmitir para centenas de pessoas, o webrtc é uma ótima opção. No entanto, se você quiser alcançar um grande público, terá que gastar dinheiro em servidores adicionais para diminuir o ônus do navegador.

HLS é talvez o método de entrega de vídeo mais econômico. A escala com um CDN é facilmente justificada do ponto de vista de custo, porque emprega infraestruturas HTTP acessíveis e tecnologia de rede atual baseada em TCP.

Conclusão

Nos últimos dois anos, o protocolo baseado em HTTP e o WebRTC percorreram um longo caminho. Apesar do fato, ambos são tecnologias de ponta que impulsionam a indústria adiante, cada uma tem seu próprio conjunto de vantagens e desvantagens. Nenhuma escolha é ideal para todos, mas um deles pode ser o mais adequado para você.

No final, o protocolo ideal será determinado pelas características do seu projeto, pelos dispositivos aos quais será distribuído e sua escala de público. Ao desenvolver uma solução de baixa latência, lembre-se dessas coisas.

Curioso para encontrar a melhor solução para você? Entre em contato com nossos especialistas em streaming de vídeo ao vivo!

HTTP, WebSocket, GRPC ou WebRTC: Qual protocolo de comunicação é melhor para o seu aplicativo?

Ative seu teste gratuito de 30 dias hoje e inicie a prototipagem.

  • Construir bate -papo por vídeo
  • O que é um SFU
  • Protocolos de streaming de vídeo
  • P2P videoconferência

Compartilhe o artigo para:

Ao escolher um protocolo de comunicação para seus aplicativos, existem muitas opções diferentes. Neste post, nós’Vou dar uma olhada em quatro soluções populares: Http, WebSocket, GRPC, e Webrtc. Vamos explorar cada protocolo investigando a tecnologia por trás dele, o que é’é melhor usado, e seus pontos fortes e fracos.

· Publicado em 26 de setembro de 2022

Http vs websockets vs grpc vs webrtc - protocolos de comunicação

Nossas formas de comunicação estão constantemente melhorando: ficando mais rápido, mais conveniente e mais confiável. Nossa comunicação evoluiu do envio de mensagens usando pombos transportadores, para correio postal, para a invenção do telefone fixo, para e -mail e mensagens de texto de um pequeno dispositivo que se encaixa em nossos bolsos.

No futuro, podemos até fazer a transição de reuniões e festas de aniversário para VR (espero que isso seja apenas uma piada!). Mas a melhor forma de comunicação sempre dependerá da situação.

Uma mensagem de texto rápida às vezes é melhor do que um e -mail longo. Outras vezes, uma videochamada com a equipe é a melhor maneira de trocar informações. Por outro lado, documentos importantes de seguro devem ser enviados por correio regular e entregue em cópia impressa.

O mesmo também é verdadeiro para as tecnologias e protocolos da web que usamos. Aplicações diferentes têm diferentes necessidades de comunicação.

Visão geral

Neste artigo, nós’Cubra alguns populares Protocolos de comunicação Podemos usar como desenvolvedores e explorar os prós e contras das diferentes opções. Nenhuma solução é melhor que outra – existem apenas alguns que são melhores para uma aplicação ou problema específico.

Alguns aplicativos requerem uma conexão ponto a ponto, com baixa latência e alta transferência de dados, e podem aceitar alguma perda de pacotes (informações). Outros aplicativos podem pesquisar o servidor de forma necessária e não’preciso de receber comunicação de um par diferente. Outros aplicativos requerem comunicação em tempo real com a confiabilidade dos dados.

Um jogo multiplayer on -line, aplicativo de mensagens, site de blog, aplicativo de galeria de mídia e software de videoconferência tem diferentes níveis de comunicação e necessidades de dados.

Se você estiver construindo uma solução de streaming de vídeo, também existem outras considerações, consulte nosso artigo sobre protocolos de streaming de vídeo para obter mais informações sobre como escolher o correto.

O que é um protocolo de comunicação?

Na rede de computadores, um protocolo é um conjunto de regras que governam como os dados são trocados entre os dispositivos. O protocolo define as regras, sintaxe, semântica e sincronização da comunicação e possíveis métodos de recuperação de erros.

Os protocolos discutidos neste artigo definem como o software da camada de aplicativo interagirá entre si. Diferentes protocolos aderem a regras diferentes, e isso’é essencial para entender os pontos fortes e limitações de cada. Neste artigo, você’aprenderei sobre os seguintes protocolos:

Protocolos de comunicação - Linha do tempo

Http (Protocolo de transferência de hipertexto) é um protocolo de aplicativo para sistemas de informação distribuídos, colaborativos e hipermídia. HTTP é a base da comunicação de dados para a World Wide Web. Hypertext é texto estruturado que usa links lógicos (hiperlinks) entre nós que contêm texto. HTTP é o protocolo para trocar ou transferir hipertexto.

Http/2 foi projetado para abordar as deficiências do protocolo HTTP original e melhorar o desempenho. HTTP/2 é mais rápido e mais eficiente que HTTP/1.1, e suporta multiplexação para permitir que várias solicitações e respostas sejam multiplexadas por uma única conexão. Outros recursos notáveis ​​incluem compressão do cabeçalho e push do servidor. Isto’s gradualmente se tornando o protocolo padrão para o tráfego da web.

WebSocket é um protocolo que permite a comunicação bidirecional entre um cliente e um servidor. É uma escolha popular para aplicativos que lidam com dados em tempo real, como aplicativos de bate-papo, jogos online e transmissão de dados ao vivo.

GRPC é uma estrutura RPC de código aberto moderno que usa HTTP/2 para transporte. É uma ótima opção para aplicativos que precisam fazer muitas chamadas de API rápidas e pequenas. O GRPC gera ligações de cliente e servidor de plataforma cruzada para muitos idiomas, possibilitando que um aplicativo cliente chame um método diretamente em um aplicativo de servidor em uma máquina diferente como se fosse um objeto local.

Webrtc é uma tecnologia que permite a comunicação em tempo real entre os clientes e possibilita o estabelecimento de conexões diretas ponto a ponto. É usado para aplicativos de vídeo, bate -papo, compartilhamento de arquivos e streaming de vídeo ao vivo.

Compreendendo TCP e UDP

Antes de se aprofundar nas camadas de aplicação mencionadas acima, ele’É importante ter um entendimento básico do TCP e UDP, duas camadas de transporte subjacentes que facilitam a transferência de dados de maneiras fundamentalmente diferentes.

TCP (Protocolo de Controle de Transmissão) é um padrão que define como estabelecer e manter uma conversa em rede via Internet. O TCP é o protocolo mais comumente usado na Internet e qualquer rede orientada a conexão. Quando você navega na web, seu computador envia pacotes TCP para um servidor da web. Um servidor da web responde enviando pacotes TCP de volta ao seu computador. Uma conexão é estabelecida entre dois dispositivos antes que qualquer dados seja trocado, e o TCP usa a correção de erros para garantir que todos os pacotes sejam entregues com sucesso. Se um pacote for perdido ou corrompido, o TCP tentará reenvistá -lo.

UDP (protocolo de datagrama do usuário) é um protocolo de camada de transporte não confiável e sem conexão. Não exige que uma conexão seja estabelecida ou mantida e não garante que as mensagens sejam entregues em ordem. O que significa que pode haver alguma perda de dados se um pacote não for enviado ou se’s corrompido. UDP é frequentemente usado para transmitir mídia ou aplicativos em tempo real, onde pacotes descartados são menos problemáticos do que garantir a entrega.

Http/1

Isto’É importante ter um entendimento básico da base de toda a comunicação e transferência de dados baseadas na Internet na camada de aplicativos – HTTP (Hypertext Transfer Protocol).

Compreender o HTTP/1 e suas limitações também serão importantes antes que possamos explorar os outros protocolos com mais detalhes e apreciar totalmente o que eles fornecem.

Com HTTP, clientes e servidores se comunicam trocando mensagens individuais. As mensagens que o cliente envia são chamadas solicitações e as mensagens enviadas pelo servidor são chamadas de respostas. Essas mensagens são enviadas como mensagens de texto regulares sobre uma conexão TCP. Eles também podem ser criptografados usando TLS e enviados usando o protocolo HTTPS.

Um cliente normalmente será um navegador ou aplicativo da web em execução em um usuário’telefone ou computador, mas poderia ser tecnicamente qualquer coisa, por exemplo, um script que rasteja sites.

As solicitações HTTP só podem fluir em uma direção, do cliente para o servidor. Não há como o servidor iniciar a comunicação com o cliente; só pode responder aos pedidos.

Exemplo de solicitação/resposta http/1.1

O HTTP é perfeito para aplicativos tradicionais da Web e do cliente, onde as informações são buscadas em uma base necessária. Por exemplo, você atualiza uma página e é feita uma solicitação ao servidor para buscar as informações mais recentes.

No entanto, esse protocolo se expandiu de uma maneira que não foi originalmente pretendido. Nas seções seguintes, nós’eu explorará alguns de http/1’s limitações.

Http/1 em tempo real

HTTP/1 é ineficiente quando as mensagens precisam ser enviadas em tempo real do cliente para o servidor e vice-versa. Por exemplo, se novas informações estiverem disponíveis no servidor que precisam ser compartilhadas com o cliente, essa transação só poderá ocorrer quando o cliente iniciar uma solicitação.

Existem soluções alternativas para isso, usando técnicas chamadas de pesquisas HTTP curtas e longas, bem como eventos enviados pelo servidor.

Pesquisa curta

Pesquisa curta HTTP é uma técnica em que o cliente envia repetidamente solicitações ao servidor até que responda com novos dados. Depois de receber dados, ele inicia o processo novamente e pergunta repetidamente até que algo mais esteja disponível.

Pesquisa curta HTTP

Esta é uma estratégia de comunicação em tempo real ineficiente, pois desperdiça muitos recursos transmitindo e analisando continuamente solicitações/respostas HTTP.

Longa votação

Com a pesquisa longa HTTP, uma única solicitação é feita do cliente e, em seguida, o servidor mantém essa conexão aberta até que novos dados estejam disponíveis e uma resposta possa ser enviada. Depois que o cliente recebe a resposta, uma nova conexão é imediatamente feita.

Pesquisa longa HTTP

A pesquisa longa é mais eficiente que a pesquisa curta, mas não é uma solução ideal para comunicação em tempo real.

Eventos enviados ao servidor (SSE)

Os eventos enviados pelo servidor permitem que um cliente mantenha aberto uma conexão e receba atualizações (mensagens de empurrar) de um servidor em tempo real, sem ter que pesquisar o servidor para novos dados constantemente. Esta é uma conexão unidirecional, para que você não possa enviar eventos do cliente para o servidor.

SSE é um padrão que descreve como os servidores podem iniciar a transmissão de dados para os clientes quando uma conexão inicial do cliente for estabelecida.

O problema de desempenho com http/1

A maioria dos fluxos de dados HTTP consiste em pequenas transferências de dados explosões, enquanto o TCP é otimizado para conexões de longa duração e transferências de dados em massa. O tempo de viagem de ida e volta da rede é o fator limitante na taxa de transferência e desempenho do TCP na maioria dos casos. Consequentemente, a latência é o gargalo de desempenho e a maioria dos aplicativos da web entrega sobre ele.

O que acima significa é que o TCP, que o HTTP usa, foi construído para lidar com conexões de longa duração e transferir muitos dados. HTTP/1, por outro lado, abriria um monte de conexões TCP de curta duração e geralmente envia apenas pequenos pedaços de dados.

Bloqueio de cabeça de linha

Um problema de desempenho com http/1.0 é que você deve abrir uma nova conexão TCP para cada solicitação/resposta. Isso não foi um problema para o que o HTTP foi inventado inicialmente – para buscar um documento de hipertexto. A parte do documento é importante porque o HTTP não foi feito para “Hipermídia”.

Abrir uma nova conexão TCP para cada solicitação se tornou um problema à medida que a web evoluiu. Começamos a criar aplicativos completos em vez de páginas simples da web, e o número de mídia e arquivos que um navegador necessário para recuperar se tornou mais. Imagine um aplicativo web típico que requer um arquivo HTML, CSS e JavaScript, além de várias imagens e outros ativos. Para cada arquivo, uma nova conexão teve que ser feita.

Junto vem http/1.1, que tem conexões persistentes que definem que podemos ter mais de uma solicitação ou resposta na mesma conexão TCP.

Esta solução é definitivamente uma melhoria, mas não permite que o servidor responda com várias respostas simultaneamente. Isto’é um protocolo serializado onde você deve enviar uma solicitação e aguardar a resposta, depois envie a segunda solicitação e assim por diante. Isso é conhecido como bloqueio de cabeça de linha.

No entanto, é possível alcançar algum paralelismo, pois um navegador pode abrir até seis conexões TCP com a mesma origem – onde “origem” é definido como a combinação única de hospedar e porta número.

Por exemplo, se você tiver um aplicativo de galeria de fotos que precisa carregar 12 imagens, seis solicitações serão feitas para carregar as seis primeiras imagens, e cada solicitação abrirá uma nova conexão TCP sob o capô. As outras seis imagens serão bloqueadas até que uma resposta seja recebida e uma das conexões abertas possa ser usada para carregar a próxima imagem. As seis conexões TCP abertas originais com a mesma origem serão reutilizadas à medida que elas ficarão disponíveis, mas você está limitado a seis conexões ativas.

Naturalmente, os programadores encontraram uma solução alternativa fácil – alterando a origem. Em vez de hospedar todos os ativos na mesma origem, você hospeda seis das imagens em uma origem e o restante em outro. Agora você pode receber 12 solicitações simultâneas (ou conexões TCP abertas). Isso é referido como “sharding”.

  • Imagens 1-6 estão hospedados em 1.imagens.com
  • Imagens 7-12 estão hospedados em 2.imagens.com

Há uma limitação de quantas vezes você pode fazer isso, e isso’é difícil determinar um número ideal de fragmentos. Em algum momento, adicionar mais fragmentos aumentará a complexidade, adicionará sobrecarga e pode resultar em links se tornando congestionados e pacotes sendo perdidos.

Também existem outras preocupações, pois cada conexão TCP adiciona sobrecarga desnecessária ao servidor. As conexões competem entre si, cada aperto de mão TCP e TLS adiciona custo desnecessário, e outros recursos de servidor/proxy devem ser usados ​​para manter as conexões ativas. Há uma limitação clara da maneira como o HTTP/1 faz uso das conexões TCP subjacentes.

Cabeçalhos e biscoitos inchados

Outro problema é que, à medida que a especificação HTTP evoluiu, mais cabeçalhos foram adicionados à especificação. Os desenvolvedores também têm a opção de adicionar cookies aos cabeçalhos, e estes podem ser arbitrariamente grandes. Isso adiciona muito inchaço, pois cada solicitação e resposta precisam transmitir todas essas informações de texto e http/1.1 não inclui um mecanismo para comprimir cabeçalhos e metadados.

Se você precisar de um protocolo de RPC de alto desempenho, essa sobrecarga aumenta rapidamente e o HTTP não é mais uma solução ideal.

Priorização

Com http/1.1, navegadores “Prioritizar” Recursos mantendo uma fila de prioridade no cliente e assumindo palpites educados sobre como fazer o melhor uso das conexões TCP disponíveis. Os navegadores têm heurísticas incorporadas para determinar quais recursos são mais valiosos do que outros.

Por exemplo, o carregamento de CSS terá uma prioridade mais alta do que o carregamento de imagens.

O problema é que não há como você, como desenvolvedor, priorizar uma solicitação sobre outra ou mudar a prioridade de uma mensagem em andamento. Qual conteúdo é carregado primeiro é o navegador, e você não tem voz no esquema de priorização.

Http/2

HTTP/2 é uma versão aprimorada do protocolo HTTP e aborda todos os problemas de desempenho descritos acima com HTTP/1 e adiciona outros aprimoramentos sem alterar nenhuma das semânticas (verbos, cabeçalhos, etc.).

A mudança mais significativa no HTTP/2 é o uso da multiplexação para enviar e receber simultaneamente várias solicitações e respostas HTTP sobre um conexão TCP única. Todas as conexões HTTP/2 são persistentes e apenas uma conexão por origem é necessária. Isso permite o uso muito mais eficiente dos recursos de rede e pode melhorar significativamente o desempenho dos aplicativos.

Alguns outros benefícios do HTTP/2:

  • Usa a compressão do cabeçalho para reduzir o tamanho dos cabeçalhos, o que evita o envio dos mesmos cabeçalhos de texto sem formatação repetidamente. Isso reduz significativamente a sobrecarga de solicitações/respostas e a quantidade de dados enviados.
  • Permite priorização, permitindo que o cliente (desenvolvedor) especifique a prioridade dos recursos necessários. Isto’Também é possível atualizar a prioridade dos pedidos em andamento – por exemplo, no Scroll, se uma imagem não estiver mais visível, a prioridade pode mudar.
  • Usa o servidor Push para enviar dados para o cliente antes de solicitar. Isso pode ser usado para melhorar os tempos de carregamento, eliminando a necessidade de o cliente fazer várias solicitações.

Como funciona o http/2?

A unidade de protocolo básico em http/2 é um quadro. Este novo mecanismo de enquadramento binário muda a maneira como os dados são trocados entre o cliente e o servidor.

O padrão define dez tipos de quadros diferentes, cada um por um propósito diferente. Por exemplo, cabeçalhos e quadros de dados formam a base das solicitações e respostas HTTP:

Solicitação http/1.1 vs http/2

A quadro é a menor unidade de comunicação que carrega um tipo específico de dados.

Alguns outros exemplos de quadros são:

  • Configurações: troca de informações de configuração no início ou durante uma conexão.
  • Prioridade: reatrimonar prioridade para mensagens.
  • Push_promise: permite que o servidor empurre os dados para você – isso atua como uma promessa do que o servidor enviará. Por exemplo, se você solicitar o índice.HTML, o servidor pode criar um push_promise que promete empurrar o aplicativo.js e estilos.CSS, o que significa que o cliente não precisa solicitar esses recursos.

Os quadros são combinados para formar um mensagem, Por exemplo, o cabeçalho e o quadro de dados na imagem acima. Isso equivale a uma solicitação ou resposta normal.

Então, finalmente, uma série de mensagens pode fazer parte de um fluxo. Isso permite um fluxo de dados bidirecional entre o cliente e o servidor e a solicitação completa e a multiplexação de resposta.

Http/2 fluxos múltiplos

A imagem acima é um pouco enganadora, dando a impressão de que várias conexões estão abertas entre o cliente e o servidor. Mas é uma única conexão TCP e os dados fluem livremente entre o cliente e o servidor de uma maneira não bloqueada.

Fluxo multiplexante HTTP/2

A nova camada de enquadramento binária permite que o cliente e o servidor dividam a mensagem HTTP em quadros independentes, intercalam -os e depois a remontam do outro lado.

Este é apenas um resumo de como http/2.0 trabalha. Se você quiser aprender mais e explorar priorização, push do servidor e compressão do cabeçalho, veja este artigo de aprofundamento. Para uma história dos problemas de http/1 e como http/2 os resolve, assista a este vídeo.

Http/2 streaming de dados bidirecionais

  • Uma única conexão HTTP/2 pode conter vários fluxos de abertura simulta.
  • Os fluxos podem ser estabelecidos e usados ​​unilateralmente ou compartilhados pelo cliente ou servidor.
  • Os fluxos podem ser fechados por qualquer ponto de extremidade.

Há muito mal -entendido com a funcionalidade de push do servidor, o que permite que um servidor sobre HTTP/2 envie recursos proativamente que você acha que você pode precisar, por exemplo, o .js e .arquivos CSS, sem o cliente solicitando. Isso não tem nada a ver com streaming bidirecional e é apenas uma técnica de otimização da web para recursos em cache.

O que é verdade é que, com http/2, o servidor pode’t iniciar a fluxo. Mas uma vez que o cliente abre um fluxo enviando uma solicitação, ambos os lados podem enviar dados quadros sobre um soquete persistente a qualquer momento. Um excelente exemplo disso é o GRPC, que discutiremos mais adiante.

Com o HTTP/2, é possível alcançar o fluxo de dados bidirecionais, e você pode argumentar que’é uma solução mais ideal do que algo como websockets, ou você pode argumentar que não é. Nós’discutirei isso com mais detalhes na seção WebSocket.

WebSockets

O objetivo dessa tecnologia é fornecer um mecanismo para aplicativos baseados no navegador que precisam de comunicação bidirecional com servidores que não dependem da abertura de várias conexões HTTP (e.g., Usando xmlhttprequest ou iframes e longa votação).

Os websockets foram inventados para ativar a comunicação complexa entre um cliente e servidor, o que permite que os dados viajem nos dois sentidos através de uma única conexão aberta imediatamente.

Depois que uma conexão WebSocket é estabelecida, o cliente não precisa pesquisar um servidor para atualizações. Em vez disso, a comunicação acontece bidirecionalmente. Isso melhora a capacidade e a capacidade em tempo real em comparação com a polpa longa e a descoberto original de HTTP/1. WebSocket não tem um formato em que cumpra. Você pode enviar quaisquer dados, texto ou bytes – essa flexibilidade é uma das razões pelas quais os websockets são populares.

Parte disso pode parecer familiar com o que discutimos na seção HTTP/2, mas’é importante notar que os websockets foram inventados muito antes de HTTP/2. Nós’eu os compararei mais tarde.

Como funcionam os websockets

WebSockets executam efetivamente como uma camada de transporte sobre o TCP.

Para estabelecer uma conexão WebSocket, o cliente e o servidor precisam primeiro executar um aperto de mão em um HTTP/1 normal.1 conexão. Este aperto de mão é a ponte do HTTP para WebSockets.

Solicitação de atualização do WebSocket

Abaixo está um exemplo de solicitação de aperto de mão do cliente. O cliente pode usar um http/1.1 Mecanismo chamou um cabeçalho de atualização para mudar sua conexão do HTTP para WebSockets:

Get /Chat HTTP /1.1 host: exemplo.COM: 8000 Upgrade: WebSocket Conexão: Upgrade sec-webesocket-key: DGHLIHNHBXBSZSBUB25JZQ == Sec-WebSocket-Version: 13

O servidor concluirá o aperto de mão com uma resposta especial que indica que o protocolo mudará de HTTP para WebSocket:

Http/1.1 101 Protocolos de comutação Upgrade: WebSocket Connection: Upgrade Sec-Websocket-Acept: S3pplmbitxaq9kygzzhzrbk+Xoo =

Os websockets requerem um identificador de recurso uniforme (URI) com um ws: // ou wss: // esquema. O esquema WS: // é usado para conexões não criptografadas, e o esquema WSS: // é usado para conexões criptografadas, semelhante à maneira como os URLs HTTP usam http: // ou https: // esquema.

Depois que o canal de comunicação bidirecional é estabelecido, o cliente e o servidor podem enviar mensagens para frente e para trás. Essas mensagens podem ser qualquer coisa, desde dados binários a texto. A conexão WebSocket permanecerá aberta até que o cliente ou o servidor se desconecte.

WebSocket Multiplexing

No momento da redação. Discutimos a multiplexação na seção HTTP/2 e aprendemos que isso’é um recurso interno para http/2, e ele’é possível ter vários fluxos multiplexados sobre a mesma conexão. Cada fluxo recebe um identificador exclusivo e todos os quadros enviados têm um ID associado ao fluxo correspondente.

Não suportar multiplexação significa que o protocolo WebSocket requer uma nova conexão de transporte para cada conexão WebSocket. Por exemplo, vários clientes que executam em diferentes guias do mesmo navegador resultarão em conexões separadas. Ter multiplexação sobre os websockets é normalmente algo que você precisa implementar como desenvolvedor ou confiar em um plugin ou biblioteca de terceiros.

WebSocket vs http/2

Então, http/2 substituiu websockets? A resposta curta é não. A resposta mais longa é que o http/2 torna possível o streaming bidirecional e, como resultado, os websockets não são a única/melhor opção. HTTP/2 como uma especificação funciona mais para você em comparação com os websockets. Possui multiplexação interna e, na maioria dos casos, resultará em menos conexões TCP abertas com a origem. Por outro lado, os websockets oferecem muita liberdade e não são restritivos em como os dados são enviados entre o cliente e o servidor, uma vez que uma conexão é estabelecida. No entanto, você precisará gerenciar a reconexão (ou confiar em uma biblioteca que faça isso por você).

Qual é o seu, em última análise, melhor, e onde um funcionará e o outro não estará em debate, e este artigo não fornece uma resposta opinativa. Os websockets oferecem muita flexibilidade e, como padrão estabelecido, é totalmente suportado por todos os navegadores modernos, e o ecossistema em torno das bibliotecas de clientes e servidores é robusto.

Para discussões mais detalhadas e opinativas, consulte Estas Perguntas sobre Overflow Stack:

  • Http/2 torna o websocket obsoleto
  • Http/2 ou websockets para mensagens de baixa latência ao servidor
  • HTTP/2 vs web-sockets para transmissão de mensagens bidirecionais

Há também um RFC para permitir um mecanismo para executar o protocolo WebSocket em um único fluxo de uma conexão HTTP/2.

Ser capaz de inicializar os websockets do HTTP/2 permite que uma conexão TCP seja compartilhada por ambos os protocolos e estende o uso mais eficiente da rede HTTP/2 da rede para os websockets.

Isso foi implementado no Chrome e Firefox. Você pode ler o documento de design do Chrome e a motivação aqui.

Quando você deve usar o websockets?

Os websockets são mais adequados para aplicativos que precisam de comunicação bidirecional em tempo real e quando pequenos dados precisam ser transmitidos rapidamente, por exemplo:

  • Aplicativos de bate -papo
  • Jogos multiplayer
  • Aplicações de edição colaborativa
  • Ticker de esportes ao vivo
  • Pedido de negociação de ações
  • Feeds de atividade em tempo real

Coincidentemente, esta é uma área em que nossa equipe tem muita experiência. Nós’Representar extensivamente o WebSockets para alimentar nossa infraestrutura de bate -papo e atividade.

O suporte ao WebSockets é bom e tem sido apoiado pelos principais navegadores e clientes há muito tempo, e também é bem documentado e fácil de usar. No entanto, os websockets não devem ser usados ​​em excesso; Dependendo do que você deseja, pode haver alternativas melhores.

Por exemplo, os eventos enviados pelo servidor (SSE) são eficientes em relação ao HTTP/2 e simples de usar. O SSE não é um sistema de comunicação bidirecional; O servidor empurra unilateralmente os dados para o cliente. Mas se tudo o que você precisa é de uma maneira de o servidor enviar dados para um cliente, isso é potencialmente uma opção melhor do que adicionar a sobrecarga dos websockets. SSE também volta ao HTTP/1.1 Quando o http/2 não está disponível. Além disso, o cliente (ou navegador) gerencia a conexão para você e suporta a reconexão automática.

Se uma conexão sobre os websockets for perdida, não há mecanismos incluídos para balanceamento de carga ou para se reconectar. Isso deve ser implementado manualmente ou por bibliotecas de terceiros.

GRPC

GRPC é uma estrutura moderna de chamada de procedimento remoto de alto desempenho de alto desempenho (RPC) que pode ser executado em qualquer ambiente. Ele pode conectar com eficiência os serviços dentro e entre os data centers com suporte conectável para balanceamento de carga, rastreamento, verificação de saúde e autenticação. Também é aplicável na última milha de computação distribuída para conectar dispositivos, aplicativos móveis e navegadores para serviços de back -end.

O GRPC é um sistema de RPC baseado em contrato, baseado em contrato, desenvolvido inicialmente no Google. O GRPC permite que os aplicativos se comuniquem de forma transparente e simplifica a construção de sistemas conectados.

Ele gera ligações de cliente e servidor de plataforma cruzada para muitos idiomas, possibilitando que um aplicativo cliente ligue diretamente um método em um aplicativo de servidor em uma máquina diferente como se fosse um objeto local.

Construído em HTTP/2, GRPC alavanca recursos como streaming bidirecional e segurança de camada de transporte embutida (TLS).

Motivação de GRPC

Isto’É importante mergulhar na motivação por trás do GRPC e por que foi inventado para entender seus benefícios. Por que não usar a tecnologia existente que já temos: http/2 e websockets, por exemplo? Por que precisamos de outra camada de abstração além do que já temos?

Existem várias maneiras pelas quais os dados podem ser estruturados e enviados pela Internet. Alguns exemplos populares são sabão, descanso e grafql. Você pode até criar seu próprio protocolo, enviar dados sobre TCP bruto e lidar com a implementação você mesmo se quiser.

Mas não importa o que você escolher como seu protocolo de comunicação, o problema é que você precisa garantir que o cliente e o servidor concordem com o protocolo. Por exemplo, se você’Re criando uma API REST, a biblioteca do cliente que você precisa usar para enviar dados de repouso é a biblioteca HTTP. A biblioteca HTTP está incorporada ao navegador por padrão, e o navegador lida com tudo para você:

  • Estabelece comunicação com o servidor.
  • Ele lida com http/2 e fallback para http/1. E precisará apoiar o HTTP/3 no futuro.
  • Ele lida com TLS e negocia o protocolo.
  • Ele lida com cabeçalhos, riachos e tudo mais.

Mas e se você’não estou em um navegador? E se você’Re um aplicativo Python em execução em algum servidor, uma cli da Golang ou um aplicativo de vibração em execução no iOS? Todos esses clientes precisam de sua própria biblioteca HTTP que entenda o protocolo com o qual você está se comunicando.

Felizmente, muitas pessoas dedicadas estão trabalhando em várias bibliotecas HTTP para todos esses idiomas e estruturas. Alguns idiomas ainda têm várias bibliotecas HTTP com diferentes recursos. Tudo isso, no entanto, tem um custo – e isso é manutenção.

Esse custo pode influenciá -lo no caso de você, por exemplo, atualizar seu servidor para HTTP/2 se a biblioteca de Golang que você usar suporta. Mas, em seu cliente Python front-end, a biblioteca HTTP equivalente não implementou HTTP/2 ou pode não ser mais mantida. Diferentes bibliotecas HTTP em outros idiomas não podem ser comparadas 1: 1.

À medida que a especificação HTTP evolui, essas bibliotecas devem acompanhar os avanços, problemas de segurança, novos recursos e outros patches. HTTP é apenas um exemplo, e o mesmo é verdade para o protocolo WebSocket ou qualquer outro. Algo pode ser bem implementado nos principais navegadores, mas essa funcionalidade deve ser portada para vários idiomas e estruturas diferentes.

Como o GRPC é diferente?

O GRPC tenta resolver esse problema, mantendo a biblioteca para os próprios idiomas populares, o que significa que novos recursos adicionados serão suportados por todos esses idiomas.

Debaixo do capô, o GRPC usa HTTP/2 como seu protocolo, no entanto, essa implementação está oculta de você. No futuro, os mantenedores do GRPC poderão substituir facilmente o HTTP/2 por HTTP/3, e você se beneficiará imediatamente dessa mudança.

O GRPC também usa buffers de protocolo como a linguagem de definição de interface (IDL) e seu formato de intercâmbio de mensagens subjacente. Este formato é neutro da linguagem e torna possível se comunicar facilmente entre diferentes linguagens de programação. Nós’Explorará este conceito mais na próxima seção.

Comunicação do cliente do servidor GRPC

O que são buffers de protocolo?

Os buffers de protocolo são o mecanismo de idioma neutro, neutro de plataforma, neutra e em termos de plataforma para serializar dados estruturados-pense xml, mas menor, mais rápido e mais simples. Você define como deseja que seus dados sejam estruturados uma vez. Em seguida, você pode usar o código fonte gerado especial para escrever e ler facilmente seus dados estruturados de e para uma variedade de fluxos de dados e usando uma variedade de idiomas.

Tradicionalmente com uma API, você não’t tem um contrato definido pelo próprio protocolo. Por exemplo, se você’estou usando descanso, você’Normalmente, apenas enviando mensagens JSON com pares de chave/valor que não são’T verificado até que a mensagem esteja no final do recebimento. Esta mensagem pode normalmente ser qualquer coisa, e’está com você para garantir que a estrutura correta seja definida.

Dê uma olhada na seguinte carga útil JSON:

‘eu ia’: 123 ‘nome’: ‘Gordon’, ‘e-mail’: ‘Gordon@em algum lugar.io’

Depois que esses dados são recebidos no cliente/servidor, eles podem ser desserializados em um objeto, por exemplo:

pessoa de classe

No entanto, cabe a você como desenvolvedor implementar a lógica correta de serialização e deserilização para a carga útil acima mencionada – isso pode envolver a escrita de Tojson e Fromjson métodos manualmente, confiando na geração de código ou pode ser um recurso interno do idioma que você’re usando.

Independentemente de como você serializa esses dados, o código subjacente precisará ser atualizado manualmente, potencialmente em vários ambientes, no caso de o esquema muda.

Com os buffers de protocolo, você cria um esquema que define o tipo de objeto para campos e especifica quais são necessários e quais são opcionais:

// a mensagem de solicitação que contém a pessoa&rsquo;S Pessoa de mensagem de informação < optional int32 required string name = 2; optional string email = 3; >// a mensagem de resposta que contém a mensagem de saudações helloreply

Você pode especificar os procedimentos que deseja expor.

// A definição de serviço de saudação. Greante de serviço < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>

Uma vez que você&rsquo;especificou as estruturas de dados e o esquema, você usa o protocoler de compilador de buffer do protocolo para gerar classes de acesso a dados em seus idiomas preferidos da sua definição de proto.

São interfaces que descrevem os objetos descritos no arquivo proto, com acessadores para cada campo, bem como métodos para serializar/analisar toda a estrutura para/para bytes brutos.

Modos GRPC

Existem quatro modos de transporte sobre o GRPC. Esses quatro modos replicam o comportamento que discutimos anteriormente, por exemplo, uma solicitação/resposta normal, SSE e WebSockets.

RPC unário

RPC unário é uma solicitação e resposta simples, semelhante a chamar uma função. O cliente pede alguns dados, e o servidor faz algum processamento e retorna esses dados.

Servidor Streaming RPC

RPCs de streaming de servidor onde o cliente envia uma única solicitação ao servidor e espera múltiplas ou um fluxo de respostas. O cliente lê do fluxo retornado até que não haja mais mensagens.

Um exemplo seria o streaming de vídeo, onde você solicita para carregar um vídeo, e o servidor responde com o fluxo de vídeo.

Streaming de cliente RPC

RPCs de streaming de cliente onde o cliente escreve uma sequência de mensagens e as envia para o servidor, usando um fluxo fornecido. Depois que o cliente terminar de escrever as mensagens, ele aguarda o servidor para lê -las e retornar sua resposta.

Um exemplo seria fazer upload de um grande arquivo para o servidor e, uma vez que todos os dados forem enviados, o cliente pode enviar uma mensagem final para indicar que o upload está concluído e o servidor pode opcionalmente responder.

RPC de fluxo bidirecional

Uma combinação de streaming de cliente e servidor. Um aplicativo de bate -papo ou um videogame multiplayer é um exemplo em que os dados precisam fluir entre o cliente e o servidor livremente.

RPCs de streaming bidirecional, onde ambos os lados enviam uma sequência de mensagens usando um fluxo de leitura de write. Os dois fluxos operam de forma independente, para que clientes e servidores possam ler e escrever em qualquer ordem que quiserem.

Em um RPC de streaming bidirecional, a chamada é iniciada pelo cliente que invocava o método. Processamento de fluxos do lado do cliente e servidor é específico do aplicativo. Como os dois fluxos são independentes, o cliente e o servidor podem ler e escrever mensagens em qualquer pedido.

Microsserviços

Um bom exemplo de onde o GRPC é poderoso está dentro dos microsserviços.

Interação com microsserviços GRPC

Neste exemplo, temos microsserviços escritos em Python, Java e Golang. Estes precisam enviar dados entre si.

Usando HTTP/1.1 e JSON exigirão que você implemente as conexões HTTP e a serialização para cada idioma. Você também precisará garantir que o esquema seja implementado corretamente para cada idioma e, se a API mudar, todos os serviços precisam ser atualizados manualmente.

GRPC, por outro lado, lida com a implementação do HTTP/2.0 Protocolo para nós. Um esquema único está escrito e o código correspondente pode ser gerado para todos os idiomas usados. Esse esquema pode ser visto como um contrato que todos os idiomas precisam aderir, tornando a comunicação entre esses serviços muito mais fácil e mais confiável.

Desempenho GRPC

O GRPC é rápido e geralmente é muito mais executado do que um equivalente a descanso:

  • Os buffers de protocolo são serializados e enviados como binários sobre o fio, que são significativamente menores que as mensagens JSON normais.
  • GRPC usa HTTP/2.0 que oferece melhorias adicionais

GRPC Compressa com eficiência Os dados enviados têm uma vantagem significativa, pois quanto menor a carga útil de dados transmitida, menos viagens redondas do TCP são necessárias. A unidade de transmissão máxima (MTU) é uma medida que representa o maior pacote de dados que um dispositivo conectado à rede aceitará, que é 1.500 bytes.

A compactação é tratada para você e você se beneficia simplesmente usando o GRPC. Como alternativa, é possível usar algo como GZIP para comprimir mensagens JSON antes de enviar HTTP regular. No entanto, isso pode ser inconveniente e adicionar uma camada de complexidade. Diferentes idiomas e ambientes também podem ter diferentes níveis de suporte para GZIP e outras ferramentas de compressão equivalentes. E para cada idioma que você usa, você precisará reimplementar a lógica correta de compressão e comunicação. Este é um problema semelhante ao que discutimos sobre a biblioteca HTTP.

Quando você deve usar o GRPC?

Se você&rsquo;Estando usando várias linguagens de programação diferentes que precisam se integrar firmemente uma com a outra e requerem comunicação rápida e frequente que envia muitos dados, então o GRPC seria perfeito.

  • Com streaming de GRPC, é&rsquo;é possível determinar o progresso do upload/download facilmente – sem precisar fazer solicitações desnecessárias de atualizações.
  • Isto&rsquo;é possível cancelar solicitações.
  • Todos os benefícios do HTTP/2.
  • Se o GRPC suportar seu idioma, você não&rsquo;É preciso se preocupar com bibliotecas externas.
  • GRPC não suporta todos os idiomas.
  • O esquema pode parecer restritivo e pesado.
  • Pode ser complicado configurar em comparação com os websockets.
  • Ainda jovens e erros podem ser difíceis de depurar.
  • A comunicação com o GRPC não funciona de maneira interna com navegadores da web. Você precisa usar a biblioteca GRPC-Web.

Webrtc

O Protocolo WebRTC é um projeto de código aberto gratuito que fornece recursos de comunicação em tempo real (RTC) para o seu aplicativo que funciona no topo de um padrão aberto. Ele suporta dados de vídeo, voz e genéricos enviados entre pares.

A tecnologia está disponível como um conjunto de APIs JavaScript para todos os principais navegadores e uma biblioteca para clientes nativos como Android e iOS Applications.

O WebRTC é diferente dos websockets e GRPC de maneira fundamental, e é que, uma vez que uma conexão é estabelecida, os dados podem (em algumas circunstâncias) serão transmitidos diretamente entre navegadores e dispositivos em tempo real sem tocar no servidor.

Isso reduz a latência e torna o WebRTC ótimo para compartilhamento de áudio, vídeo ou tela – onde a baixa latência é importante e muitos dados precisam ser enviados.

Motivação do WebRTC

O WebRTC pretende padronizar como a mídia, como áudio e vídeo, é comunicada pelo fio-e realizar isso convenientemente com uma API simples de usar.

Outras soluções, como a WebSockets, possibilitam a transmissão de dados entre dois pares; No entanto, esses dados precisam ser transmitidos por meio de um proxy ou servidor. Confiar em outro servidor adiciona latência, pois tudo o que é enviado através dele precisa ser analisado, processado e descriptografado. Há um homem intermediário entre os dois colegas. Para streaming de vídeo ou mesmo bate-papo em tempo real, essa latência é indesejável.

Os navegadores também são mais poderosos agora do que alguns anos atrás. Os navegadores têm acesso à webcam e microfone, exigindo uma API integrada e uma maneira fácil de transmitir esta informação rica. O WebRTC tem como objetivo simplificar todo esse processo e expor uma API fácil de usar disponível nos navegadores.

O problema com o webrtc

A motivação é definida e parece que o WebRTC é uma solução mágica, permitindo uma comunicação mais rápida entre dois pares. Mas, infelizmente, existem alguns problemas.

O primeiro problema é que o estabelecimento de uma conexão ponto a ponto não é simples-a Internet é complicada e há muitos roteadores, proxies e firewalls entre Alice na Califórnia e Ben na África do Sul. E em algumas circunstâncias, pode não ser possível ter uma linha direta entre dois colegas. Uma conexão entre dois colegas pode precisar ignorar um firewall que impede conexões abertas, você pode não ter um endereço IP público, ou o roteador pode não permitir a conexão direta entre os pares.

O segundo problema é que precisa haver uma maneira de dois colegas se descobrirem e determinarem a rota ideal em que a comunicação pode acontecer. Isso exige que certas informações sejam compartilhadas entre os dois clientes antes que eles saibam como se comunicar melhor – e uma maneira comum de compartilhar essas informações é usando o WebSockets.

O que é um pouco engraçado. Um Http A conexão é atualizada para um WebSocket conexão apenas para compartilhar informações para estabelecer um Webrtc conexão.

Se você realmente quer apreciar o que o WebRTC faz e sua complexidade, precisará se familiarizar com alguns termos potencialmente desconhecidos: Nat, Smun, Turn, Ice, SDP e sinalização.

Como funciona o webrtc?

Na visão geral acima, descrevemos a motivação do webrtc, que descreve a idéia básica de como funciona. Esta seção mergulhará em alguns dos tópicos de nível inferior que você precisa entender para entender completamente o WebRTC.

Tradução de endereço de rede (NAT)

Entender o que é nat e como funciona é essencial para entender o webrtc.

Um NAT é usado para fornecer ao seu dispositivo (laptop ou telefone celular) um endereço IP público; Isso é importante porque queremos estabelecer uma conexão entre dois pares que provavelmente estão atrás de um roteador. Um roteador terá um endereço IP público e todos os dispositivos conectados ao roteador terão um endereço IP privado.

Esses dispositivos não são&rsquo;t diretamente exposto à Internet. Em vez disso, todo o tráfego passa pelo roteador, que se comunica com o mundo exterior. Quando você solicita recursos de um servidor remoto, o roteador é responsável por &ldquo;roteamento&rdquo; A solicitação da sua máquina local para esse servidor e roteando a resposta do servidor de volta à sua máquina local.

Esses pedidos são traduzidos do dispositivo&rsquo;s endereço IP privado para o roteador&rsquo;s IP público com uma porta exclusiva – que é então armazenada em uma mesa Nat. Dessa forma, não é necessário ter um IP público único para cada dispositivo em uma rede local.

Tabela Nat

A imagem acima é um exemplo simplista de como seria uma tabela nat. Deixar&rsquo;s fingir o dispositivo local, com um IP privado de 192.168.1.50, Solicita o endereço público 82.88.31.26:80 para alguns dados.

Isso é realizado pelo dispositivo local, enviando primeiro a solicitação ao roteador, que direciona a solicitação para o dispositivo remoto. O roteador então diz ao dispositivo remoto para enviar a resposta ao seu endereço IP externo, com uma porta exclusiva, que neste exemplo é 86.88.71.25: 8830.

Esta porta exclusiva é importante, pois permitirá que o roteador determine qual dispositivo local fez a solicitação. Todas essas informações são armazenadas em uma mesa de nat. Depois que o roteador recebe a resposta, ele pode executar uma pesquisa e decidir em qual dispositivo local a resposta deve ser encaminhada.

É bastante simples de entender quando temos um par de solicitação/resposta normal – um dispositivo e um servidor. Mas o que acontece se outro dispositivo externo com um endereço IP completamente diferente decide enviar pacotes para o endereço IP externo do roteador na mesma porta que foi usada anteriormente? Se o roteador o encaminhará para o dispositivo local que é mapeado para esse número da porta?

Esta decisão depende de qual tradução NAT o roteador usa e, finalmente, determina se uma conexão ponto a ponto pode ser estabelecida. Dependendo do roteador que você usar, ele implementará uma tradução diferente de NAT. Existem quatro métodos diferentes de tradução do NAT:

  • NAT individual
  • Endereço NAT restrito
  • PORT RESTRITO RESTRIRT NAT
  • Nat simétrico

NAT individual: Mapas Um endereço IP externo e porta (geralmente pública) para um endereço IP interno e porta (geralmente privados). No exemplo acima, se o roteador receber uma resposta na porta 8830 e IP externo 86.88.71.25, irá encaminhá -lo para o dispositivo local 192.168.1.50, Como esse é o dispositivo local que fez a solicitação (informações recuperadas da tabela NAT). O roteador não se importa com o IP de destino ou de onde a resposta se originou. Se isso&rsquo;s Em uma porta externa específica, vai para esse dispositivo local.

Endereço NAT restrito: Um dispositivo remoto pode enviar um pacote para o dispositivo local apenas se o dispositivo local tivesse enviado anteriormente um pacote para o endereço IP remoto. Em resumo, só permitimos que isso nos comunicássemos com este host antes. No exemplo acima, permita apenas pacotes de 86.88.71.25.

PORT RESTRITO RESTRIRT NAT: O mesmo que o endereço restrito NAT, mas a restrição também inclui números de porta. O dispositivo remoto pode enviar apenas um pacote para o dispositivo interno se o dispositivo interno tivesse enviado anteriormente um pacote para o endereço IP X e a porta P. No exemplo acima, permita apenas de 86.88.71.25 e porta 80.

Nat simétrico: O mais restritivo. Para isso IP externo, porta externa, IP de destino, e Porto de destino Todos têm que corresponder ao que está presente na mesa do NAT. Isso significa que os pacotes só podem ser enviados para uma porta específica de um dispositivo local se esse dispositivo foi aquele que solicitou o IP e a porta de destino.

O WebRTC não funciona sobre o NAT simétrico e para entender por que precisamos entender o que é um servidor de atordoamento.

Utilitários de Traversal da sessão para Nat (atordoamento)

O atordoamento é um protocolo para informar seu endereço/porta IP público através do NAT e determinar quaisquer restrições no seu roteador que impediriam uma conexão direta com um colega. Um servidor de atordoamento é um mecanismo para os clientes descobrirem a presença de um NAT, bem como o tipo de NAT, e determinar o endereço IP externo do NAT e o mapeamento da porta.

O objetivo de uma solicitação de atordoamento é determinar sua presença pública para que essa presença pública possa ser comunicada com outra pessoa para que eles possam se conectar com você – essa comunicação é chamada de sinalização, que discutiremos mais tarde.

Funciona para um a um, endereço restrito, e PORT RESTRITO RESTRIRT NAT. Mas não funciona para Nat simétrico. Porque quando você solicita o servidor de atordoamento para suas informações públicas, esse par de comunicação foi criado especialmente para o cliente que faz a solicitação. Não é possível envolver outro colega usando a comunicação simétrica de NAT sobre a porta do dispositivo local é restrita ao servidor de atordoamento.

Servidores de atordoamento são leves e baratos para manter. Existem servidores de atordoamento público que podem ser consultados gratuitamente.

A imagem abaixo ilustra quando o atordoamento funciona e quando uma conexão ponto a ponto pode ser estabelecida.

Servidor de atordoamento do webrtc - quando funciona

Por outro lado, se uma conexão ponto a ponto não puder ser estabelecida, por exemplo, quando um colega estiver por trás de um NAT simétrico-então a conexão final na etapa três não será permitida. À medida que a conexão inicial foi estabelecida com o servidor de atordoamento, e nenhum outro par pode usar essas informações de conexão.

Em um evento como este em que uma conexão direta não pode ser estabelecida, precisamos fazer uso de um servidor de turno.

Traversal usando relés em torno de Nat (Turn)

Turn é um protocolo para retransmitir tráfego de rede quando uma conexão direta não pode ser estabelecida entre dois pares. Por exemplo, se um colega está por trás de um NAT simétrico, é necessário um servidor dedicado para retransmitir o tráfego entre pares. Nesse caso, você criaria uma conexão com um servidor de turno e dizia a todos os colegas para enviar pacotes para o servidor, que será encaminhado para você.

Isso vem com sobrecarga, e um servidor de turno pode ser caro para manter e executar.

A imagem a seguir ilustra como um servidor de turno é usado para transmitir mensagens entre dois ou mais pares.

WebRTC Turn Server

Estabelecimento de conectividade interativa (gelo)

O ICE usa uma combinação dos protocolos de atordoamento e giro para fornecer um mecanismo para os hosts descobrirem os endereços IP públicos um do outro e estabelecer uma conexão direta. Se uma conexão direta for impossível, o gelo usará Turn para estabelecer uma conexão de revezamento entre os dois hosts.

Todas essas maneiras possíveis de potencialmente estabelecer uma conexão são chamadas de candidatos a gelo. Todos os endereços coletados são enviados para o colega remoto via SDP, que exploraremos a seguir. O WebRTC usa essas informações em cada cliente para determinar a melhor maneira de se conectar a outro par. Pode ser que ambos os colegas estejam no mesmo NAT e que uma conexão local possa ser estabelecida, ou pode ser que ambos os colegas estejam por trás do NAT simétrico e exija um relé usando um servidor de turno.

Sessão Descrição Protocolo (SDP)

O SDP é essencialmente um formato de dados para descrever sessões de mídia para anúncio de sessão, convite de sessão e outras formas de iniciação de sessão. É um padrão para descrever o conteúdo multimídia para a conexão, como resolução, formatos, codecs e criptografia.

É importante ressaltar que isso&rsquo;S também usado para descrever os candidatos ao gelo e outras opções de rede. Quando os pares A deseja se conectar ao par B, eles precisam compartilhar informações do SDP para se conectar. Como este SDP é compartilhado está totalmente de acordo.

Sinalização – estabelecendo uma conexão

A sinalização é o processo de envio de informações de controle entre dois dispositivos para determinar os protocolos de comunicação, canais, codecs de mídia e formatos e método de transferência de dados, bem como quaisquer informações de roteamento necessárias. A coisa mais importante a saber sobre o processo de sinalização para o WebRTC: não é definido na especificação.

As conexões de pares lidam com a conexão de duas aplicações em diferentes computadores. Uma conexão é estabelecida através de um processo de descoberta e negociação chamado sinalização.

Uma ressalva importante é que o WebRTC não possui sinalização incorporada como parte da especificação, pois não é possível para dois dispositivos entrarem em contato diretamente, que exploramos em detalhes anteriormente. Para dois colegas se conectarem usando o WebRTC, eles exigem dados SDP um do outro.

Como tal, cabe a você, como desenvolvedor, estabelecer uma maneira de dois dispositivos compartilharem essas informações. Uma opção popular é o WebSockets, ou as informações de sinalização podem ser enviadas em e -mail ou entregues a pé e inseridas manualmente para estabelecer uma conexão.

Depois que essas informações são compartilhadas, você tem tudo o que precisa para dois colegas para estabelecer uma conexão WebRTC, pode ser uma conexão direta ou pode ser através de um servidor de turno.

Quando você deve usar o webrtc?

Você pode até perguntar: por que devo usar o webrtc? Parece complicado de entender e ainda mais complicado de configurar.

É complicado configurar, mas há muitos benefícios:

  • A API é fácil de usar e está disponível diretamente no seu navegador.
  • Tem um bom desempenho, possibilitando a transmissão de alto teor de largura de banda, como vídeo ou áudio.
  • Recursos mais avançados, como compartilhamento de tela e compartilhamento de arquivos, podem ser facilmente implementados.
  • Suporta conexão ponto a ponto com latência reduzida.
  • De código aberto e de código aberto.
  • Sem sinalização interna.
  • Você precisa manter os servidores de atordoamento e virar.
  • Para conexões em grupo (como uma videochamada em grupo), pode ser necessário um SFU.
  • Complicado de configurar e entender.

Qual você deve escolher?

O protocolo que você escolher dependerá de suas necessidades específicas.

Http: Com http/2, agora é possível ter comunicação bidirecional entre um cliente e servidor. Dependendo do seu aplicativo, você pode não precisar de comunicação duplex completa e algo como SSE será mais do que suficiente. Também descobrimos neste artigo que a WebSockets e o GRPC dependem do HTTP, enquanto o WebRTC exige algum outro canal para sinalização. Isto&rsquo;S Vale a pena explorar primeiro se o HTTP resolver seu aplicativo As necessidades antes de se aprofundar nesses outros protocolos.

WebSockets são mais adequados para aplicativos em tempo real que precisam de comunicação bidirecional, como aplicativos de bate-papo. Eles também são relativamente fáceis de configurar e usar. No entanto, os websockets não são tão eficientes quanto o GRPC ou o WebRTC, e eles não são adequados para aplicativos que precisam enviar muitos dados.

GRPC é um protocolo mais eficiente do que o WebSockets, e é mais adequado para aplicativos que precisam enviar muitos dados. No entanto, o GRPC é mais complicado de configurar e usar do que os websockets. Se você precisar fazer muitas pequenas chamadas de API, o GRPC é uma boa escolha. Ou, quando você implementa microsserviços com várias linguagens de programação que precisam se comunicar, depois o GRPC&rsquo;S Dados estruturados serializados e geração de código economizarão muito tempo. Isto&rsquo;também vale a pena notar que você pode&rsquo;T use facilmente o GRPC do navegador. Para isso, você precisa de um proxy dedicado em seu back -end que traduz chamadas – veja GRPC -Web.

Webrtc é o protocolo mais eficiente para a comunicação em tempo real com baixa latência entre navegadores e dispositivos, e é adequado para aplicações que precisam enviar muitos dados. O WebRTC também fornece uma API fácil de usar diretamente disponível no navegador, facilitando o compartilhamento de sua câmera, áudio, tela ou outros arquivos. No entanto, o WebRTC pode ser complicado de configurar e usar, pois exige que você execute a sinalização e a manutenção de um servidor de turno e atordoamento.

Conclusão

O futuro verá mais protocolos, alterações e melhorias adicionais. O HTTP/3 já foi lançado e também há um novo protocolo de comunicação chamado WebTransport, um substituto potencial para o WebSockets.

Esperamos que você tenha achado este artigo útil e que isso o ajude a tomar uma decisão informada. Se você quiser continuar a discussão, entre em contato conosco no Twitter ou no LinkedIn.

WebRTC vs HLS: Comparação entre protocolos de streaming

Esta postagem do blog compara WebRTC e HLS, dois dos protocolos de streaming mais populares. Examina os prós e contras de cada protocolo e explora seus aplicativos. Além disso, a posta.

Ashik TS

22 de fevereiro de 2023

WebRTC vs HLS: Comparação entre protocolos de streaming

Na era digital de hoje, os protocolos de streaming tornaram -se essenciais para consumir e compartilhar mídias. De transmissões ao vivo a vídeo sob demanda, os protocolos de streaming nos permitiram acessar o conteúdo em qualquer lugar, a qualquer hora. Mas com tantas opções disponíveis, saber o que é melhor para suas necessidades pode levar tempo e esforço. Neste artigo, veremos dois dos protocolos de streaming mais populares: WebRTC e HLS, compará -los e ajudá -lo a tomar uma decisão informada.

O que é webrtc?

O WebRTC é um protocolo gratuito e de código aberto desenvolvido pelo W3C. Permite a comunicação em tempo real, como chamadas de voz e vídeo, conferência online e bate-papo. O WebRTC tornou-se proeminente recentemente devido à sua capacidade de fornecer fluxos de vídeo e áudio de baixa qualidade e alta qualidade.

Aplicações do WebRTC

Aqui estão alguns dos casos de uso mais frequentemente empregados do WebRTC:

  • Chamadas de voz e vídeo: Um dos casos de uso mais populares para WebRTC são as chamadas de voz e vídeo. Permite comunicação em tempo real e de baixa latência entre duas ou mais pessoas. As empresas usam amplamente esse recurso para comunicação interna, colaboração e aplicativos voltados para o consumidor para redes sociais e namoro online.
  • Conferência Online: Outro caso de uso popular para WebRTC é a conferência online. Ele permite que vários usuários ingressem em uma sala de reuniões virtuais e interajam entre si por meio de vídeo e áudio, além de compartilhar telas e documentos. As empresas usam amplamente esse recurso para reuniões e apresentações remotas, bem como por instituições educacionais para aulas e palestras on -line.
  • Bater papo: O WebRTC também permite a comunicação baseada em texto em tempo real através do chat. Esse recurso pode ser integrado a vários aplicativos e plataformas, como redes sociais, jogos online e suporte ao cliente. Permite comunicação instantânea e pode ser usada para aprimorar a experiência do usuário em vários contextos.

O que é HLS?

HLS (HTTP Live Streaming) é um protocolo de streaming de taxa de bits adaptável desenvolvido pela Apple. É amplamente utilizado para transmissão ao vivo em dispositivos móveis e navegadores de mesa. O HLS foi projetado para funcionar com o protocolo HTTP e pode ser facilmente integrado à infraestrutura baseada em HTTP existente.

Aplicações do HLS

Aqui estão algumas das maneiras mais comuns das maneiras que o HLS é usado nos dias de hoje:

  • Transmissão ao vivo: O HLS é amplamente utilizado para eventos ao vivo, como esportes, concertos e transmissões de notícias. O protocolo foi projetado para lidar com o tráfego alto e proporcionar uma experiência de streaming suave para os espectadores. O recurso de taxa de bits adaptável permite que o fluxo se ajuste à conexão com a Internet do espectador, proporcionando uma melhor experiência de visualização.
  • Video-sob demanda (VOD): O HLS também é comumente usado para conteúdo de vídeo sob demanda (VOD), como filmes, programas de TV e tutoriais em vídeo. O protocolo permite fácil integração com sistemas de gerenciamento de conteúdo e uma experiência de streaming suave para o espectador com taxa de bits adaptável.
  • IPTV e OTT: O HLS também é usado nos serviços IPTV e Over-the-Top (OTT), como streaming de serviços de televisão e vídeo. A capacidade do protocolo de lidar com o tráfego alto e proporcionar uma experiência de streaming suave o torna uma escolha popular para esses aplicativos.
  • Streaming móvel: O HLS também é popular para streaming móvel, pois é suportado nas plataformas iOS e Android.
  • Enterprise Communications: O HLS é usado em plataformas de comunicação corporativa que permitem aos funcionários transmitir vídeos, compartilhar telas e fazer chamadas de áudio/vídeo, pois oferece uma experiência de streaming suave e é compatível com a maioria dos dispositivos.

WebRTC vs HLS: uma comparação detalhada

Recurso Webrtc HLS
Suporte do navegador Chrome, Firefox, Safari, Edge (com um plugin) Safari, Chrome, Edge, Firefox (com um plugin)
Suporte ao dispositivo Windows, MacOS, Linux, iOS, Android iOS, Android, MacOS, Windows
Suporte de codec VP8, VP9, ​​H.264, h.265 H.264, h.265
Latência Baixo Alto
Segurança Alto Médio
Qualidade de vídeo Alto Alto
Método de Entrega Pessoa para pessoa Baseado em servidor
Escalabilidade Alto Alto
Compatibilidade Limitado Largo

Ao decidir qual protocolo usar, é importante considerar fatores como latência, segurança, qualidade do vídeo, método de entrega, escalabilidade e compatibilidade.

Latência

Quando se trata de latência, o WebRTC tem uma clara vantagem sobre o HLS. O WebRTC usa comunicação em tempo real, o que significa que o vídeo é entregue instantaneamente ao espectador. Por outro lado, o HLS usa um mecanismo de buffer, que atrasa a entrega de vídeo. Dependendo das condições da rede, esse atraso pode levar de alguns segundos a alguns minutos. Esses elementos tornam o WebRTC mais adequado para casos de uso que requerem baixa latência, como bate -papos de vídeo ao vivo e jogos online.

Segurança

Tanto o WebRTC quanto o HLS usam criptografia para proteger fluxos de vídeo. No entanto, o nível de segurança fornecido por cada protocolo é diferente. O WEBRTC usa o Protocolo de Transporte Em tempo real seguro (SRTP) para criptografar o fluxo de vídeo, que é considerado um dos métodos de criptografia mais seguros. Por outro lado, o HLS usa o protocolo HTTP Secure (HTTPS) para criptografar o fluxo de vídeo. Enquanto o HTTPS é considerado seguro, o SRTP é menos seguro. Por esses motivos, o WebRTC é mais adequado para casos de uso que requerem altos níveis de segurança, como transações financeiras e comunicação do governo.

Qualidade de vídeo

Tanto o WebRTC quanto o HLS são capazes de fornecer vídeo de alta qualidade. No entanto, a qualidade do vídeo entregue por cada protocolo pode variar dependendo das condições da rede. O WebRTC usa streaming de taxa de bits adaptável, que ajusta a qualidade do vídeo em tempo real com base nas condições de rede do espectador. Isso significa que a qualidade do vídeo será alta, mesmo em redes de baixa largura de banda. Por outro lado, o HLS usa um mecanismo de entrega de vídeo pré-segmentado, que pode levar ao buffer e gaguejando em redes de baixa largura de banda. Como resultado, o WebRTC é mais adequado para casos de uso que exigem vídeo de alta qualidade em redes de baixa largura de banda.

Método de Entrega

WebRTC e HLS usam diferentes métodos de entrega para transmitir vídeo. O WebRTC usa um método de entrega ponto a ponto (P2P), o que significa que o vídeo é entregue diretamente de um espectador para outro. Isso reduz a carga do servidor e aumenta a escalabilidade do fluxo de vídeo. Por outro lado, o HLS usa um método de entrega do cliente-servidor, o que significa que o vídeo é entregue do servidor para o espectador. Isso pode levar a problemas de escalabilidade, especialmente durante os horários de pico de trânsito. Como resultado, o WebRTC é mais adequado para casos de uso que requerem altas escalabilidades, como eventos ao vivo e jogos online.

Escalabilidade

WebRTC e HLS têm diferentes características de escalabilidade. O WebRTC usa um método de entrega P2P, que reduz a carga do servidor e aumenta a escalabilidade do fluxo de vídeo. Por outro. Como resultado, o WebRTC é mais adequado para casos de uso que requerem altas escalabilidades, como eventos ao vivo e jogos online.

Compatibilidade

WebRTC e HLS têm diferentes características de compatibilidade. O WebRTC é compatível com a maioria dos navegadores modernos, incluindo Chrome, Firefox e Safari. No entanto, não é compatível com o Internet Explorer e Edge. Por outro lado, o HLS é compatível com a maioria dos navegadores modernos, incluindo Chrome, Firefox, Safari, Internet Explorer e Edge. Por esse motivo, o HLS é mais adequado para casos de uso que requerem compatibilidade com uma ampla gama de navegadores e dispositivos.

Webrtc vs hls: o que é melhor?

Webrtc é uma ótima opção para aplicativos de streaming em tempo real e de baixa latência. É perfeito para casos de uso, como chamadas de voz e vídeo, conferência online e bate -papo. Por outro lado, HLS é uma excelente opção para transmitir vídeo ao vivo para um grande público. É particularmente adequado para casos de uso, como streaming de esportes ao vivo, shows e outros eventos que exigem alta escalabilidade. A capacidade do HLS de se adaptar a diferentes condições de rede o torna uma escolha popular para transmitir conteúdo para os espectadores em vários dispositivos e redes.

Além disso, o HLS tem melhor suporte para proteger os direitos autorais do conteúdo, tornando -o uma escolha preferida para transmitir conteúdo premium. Quando se trata de compatibilidade, o HLS tem uma ligeira vantagem sobre o WebRTC. O HLS é amplamente suportado, tornando -o uma opção mais versátil para transmitir conteúdo para um público mais amplo. No entanto, isso tem o custo de uma latência um pouco mais alta.

Se o seu foco principal é o streaming de baixa latência em tempo real, o WebRTC pode ser sua melhor opção. Caso contrário, se seu foco principal estiver na escalabilidade e compatibilidade, então o HLS pode ser a melhor escolha.

Conclusão

Em conclusão, o WebRTC e o HLS têm seus próprios recursos e casos de uso únicos que os tornam adequados para diferentes tipos de streaming. O WebRTC é mais adequado para baixa latência e comunicação em tempo real, como chamadas de voz e vídeo, conferência on-line e bate-papo. Por outro lado, o HLS é mais adequado para o streaming de alta qualidade de vídeos pré-gravados em uma ampla gama de dispositivos.

Perguntas frequentes

1. Webrtc usa tcp ou udp?

O WebRTC usa TCP e UDP, dependendo do tipo de dados transmitidos. Ele usa TCP para controlar mensagens e UDP para transmissão de mídia.

2. YouTube usa HLS?

Sim, o YouTube usa o HLS (HTTP Live Streaming) como um de seus protocolos de streaming para entregar vídeos aos espectadores.

3. O WebRTC é apenas para navegadores?

O WebRTC é principalmente uma tecnologia baseada em navegador, mas também pode ser usada em aplicativos nativos através das bibliotecas WebRTC.

4. Netflix usa webrtc?

Não, a Netflix não usa o WebRTC para streaming. Eles usam sua própria tecnologia proprietária chamada Streaming Adaptive sobre HTTP (ASOH) que é baseado no HTTP Live Streaming (HLS).