WebRTC usa http?
WebRTC usa http
L’apertura di una nuova connessione TCP per ogni richiesta è diventato un problema quando il web si è evoluto. Abbiamo iniziato a costruire applicazioni complete anziché semplici pagine Web e il numero di media e file un browser necessario per recuperare è diventato di più. Immagina una tipica applicazione Web che richiede un file HTML, CSS e JavaScript, nonché varie immagini e altre risorse. Per ogni file, è stata stabilita una nuova connessione.
WebRTC vs HTTP Streaming
O ектрон scart.
-Discutere-Webrtc
Ho sperimentato i protocolli di streaming WebRTC e HTTP (HLS, MPEG-DASH) per lo streaming video in diretta per alcuni giorni e ho scoperto che mentre WebRTC raggiunge secondi secondari, i protocolli di streaming HTTP hanno sempre latenze multi-secondi. Ho quindi un paio di domande relative a WebRTC vs HTTP Streaming.
1. In che modo WebRTC è in grado di ottenere secondari secondari rispetto ai protocolli di streaming HTTP?
WEBRTC è in grado di ottenere secondi secondari secondari rispetto ai protocolli di streaming HTTP a causa delle sue capacità di comunicazione in tempo reale (RTC). WebRTC è creato per fornire applicazioni con trasmissione istantanea di video, audio e altri dati tra i peer. Ciò consente una trasmissione praticamente istantanea di contenuto, con conseguente sotto -latenze.
2. Se WebRTC fornisce già streaming video a bassa latenza, perché esiste uno sforzo per unificare i protocolli di streaming HTTP sotto lo standard MPEG-DASH?
Lo sforzo di unificare i protocolli di streaming HTTP sotto lo standard MPEG-DASH è guidato dalla necessità di un approccio standardizzato allo streaming basato su HTTP. Mentre WebRTC fornisce streaming video a bassa latenza, non è adatto a tutti i casi d’uso e potrebbe non essere compatibile con tutti i dispositivi e il software. Unificando i protocolli di streaming HTTP sotto lo standard MPEG-DASH, diventa più facile per i fornitori di contenuti fornire streaming video di alta qualità su diverse piattaforme e dispositivi, garantendo un’esperienza di visualizzazione coerente per gli utenti.
3. Come si confronta WebRTC con RTMP? (Fino ad ora non ho esplorato RTMP, ma voglio sapere se è possibile ottenere latenze sub-secondi con RTMP)
WebRTC e RTMP sono entrambi protocolli utilizzati per i media di streaming, ma hanno alcune differenze in termini di latenza e compatibilità. WebRTC è progettato per la comunicazione in tempo reale e può ottenere latenze sotto-secondi, rendendolo adatto per applicazioni che richiedono trasmissione istantanea. D’altra parte, RTMP (protocollo di messaggistica in tempo reale) è un protocollo utilizzato principalmente per lo streaming di audio, video e dati tra un encoder e un server di streaming. Mentre RTMP può fornire uno streaming a bassa latenza, il raggiungimento di latenze sotto-secondi può dipendere da vari fattori come le condizioni di rete e le configurazioni del server.
Uno studio comparativo tra streaming basato su WebRTC e HTTP
Per molto tempo, abbassare la latenza di streaming è stato un argomento popolare. Le latenze di decine di secondi, e persino un minuto, sono state conosciute con lo streaming basato su HTTP in passato. Con la latenza tradizionale di trasmissione nei secondi a una cifra e soluzioni emergenti come Servizi di sviluppo WebRTC, La domanda è quale approccio adottare. Lo streaming WebRTC è in grado di fornire video non solo in sotto-secondi, ma in meno di 500 millisecondi. Attualmente è la tecnologia di streaming a bassa latenza disponibile, consentendo una trasmissione praticamente istantanea.
In questa elegante guida, esamineremo come funziona WebRTC e lo confronteremo con HTTP dal punto di vista di a Servizio di streaming video. Iniziamo!
Una rapida carrellata di streaming basato su HTTP e WEBRTC
I protocolli basati su HTTP sono server Web tecnicamente regolari che inviano download progressivi. Usano lo streaming bitrate adattivo per fornire la massima qualità del video possibile e l’esperienza di visualizzazione, indipendentemente dalla connessione, dal software o dal dispositivo. Alcuni dei più comuni protocolli basati su HTTP disponibili includono MPEG-Dash, Apple’S HLS, Adobe HDS e Microsoft Smooth Streaming.
WebRTC è un protocollo robusto supportato da eccellenti strumenti e supporto del settore diffuso. È stato creato per fornire applicazioni con funzionalità di comunicazione in tempo reale (RTC), consentendo di trasferire video, audio o qualsiasi altro tipo di dati. Questa è una distinzione chiave tra i due rispetto allo streaming basato su HTTP, che è orientato al server client.
UDP vs. TCP
I componenti di base, il protocollo di base (UDP) di Internet Protocol Suite Suite (UDP) e il protocollo di controllo della trasmissione (TCP), risiedono entrambi sul livello di trasporto.
La distinzione principale tra UDP e TCP è che TCP richiede una stretta di mano a tre durante la trasmissione dei dati. L’iniziatore (client) richiede che l’accettore (server) stabilisca una connessione, risponde l’accettore e l’iniziatore riconosca la risposta e mantiene una sessione tra le due estremità. Pertanto, il TCP è estremamente credibile e può gestire la perdita e l’ordinamento dei pacchetti.
UDP, d’altra parte, non’T richiede una stretta di mano per iniziare. Trasferisce i dati indipendentemente dai vincoli di larghezza di banda, il che li rende più veloci e rischiosi. Poiché UDP non supporta ritrasmissioni, ordinamento dei pacchetti o controllo degli errori, un HicCup di rete ha il potenziale per contaminare i dati in transito.
I protocolli come WebRTC usano spesso UDP, mentre i protocolli basati su HTTP usano TCP.
Come si immerge WebRTC rispetto allo streaming basato su HTTP?
- Che tipo di latenza stai cercando?
- Quali saranno le dimensioni del pubblico?
- Qual è l’importo massimo che sei disposto a spendere?
Latenza
Le risposte alle domande di latenza dipendono dalla gamma di latenza che si punta.
Gli HL nuovi e migliorati come LL-HLS e LL-Dash hanno una latenza di 3 secondi o meno. Questo è ancora considerato velocemente e sarà sufficiente per la maggior parte dei casi d’uso a bassa latenza. WebRTC, d’altra parte, rimane la soluzione più veloce se il tuo caso d’uso richiede uno streaming in tempo reale. Dal momento che è un protocollo UDP sviluppato per adattarsi completamente a Internet moderno. Supporta 500 ms di latenza in tempo reale.
WebRTC è stato progettato per fornire una comunicazione bidirezionale e in tempo reale. A differenza di HLS, che si basa su TCP, WebRTC si basa sull’UDP. Ciò significa che WebRTC può iniziare senza il client e il server che scambiano informazioni sulla stretta di mano. Di conseguenza, WebRTC è più veloce, ma lo rende anche più suscettibile alle fluttuazioni della rete.
WebRTC è il protocollo da utilizzare se la tua soluzione richiede uno streaming peer-to-peer e in tempo reale. Tuttavia, se hai bisogno di far crescere il tuo pubblico sopra le 50 persone, dovrai riconsiderare la tua strategia.
Rispetto a HLS, il ridimensionamento WebRTC è sostanzialmente più difficile. Tuttavia, questo può essere risolto con un flusso di lavoro ibrido. La tua scelta sarà determinata dal tuo caso d’uso e dalla dimensione del pubblico di destinazione.
Quando si tratta di raggiungere un pubblico enorme, i protocolli basati su HTTP escono in cima.
WebRTC usa http
L’apertura di una nuova connessione TCP per ogni richiesta è diventato un problema quando il web si è evoluto. Abbiamo iniziato a costruire applicazioni complete anziché semplici pagine Web e il numero di media e file un browser necessario per recuperare è diventato di più. Immagina una tipica applicazione Web che richiede un file HTML, CSS e JavaScript, nonché varie immagini e altre risorse. Per ogni file, è stata stabilita una nuova connessione.
WebRTC vs HTTP Streaming
O ектрон scart.
-Discutere-Webrtc
Ho sperimentato i protocolli di streaming WebRTC e HTTP (HLS, MPEG-DASH) per lo streaming video in diretta per alcuni giorni e ho scoperto che mentre WebRTC raggiunge secondi secondari, i protocolli di streaming HTTP hanno sempre latenze multi-secondi. Ho quindi un paio di domande relative a WebRTC vs HTTP Streaming.
1. In che modo WebRTC è in grado di ottenere secondari secondari rispetto ai protocolli di streaming HTTP?
2. Se WebRTC fornisce già streaming video a bassa latenza, perché esiste uno sforzo per unificare i protocolli di streaming HTTP sotto lo standard MPEG-DASH?
3. Come si confronta WebRTC con RTMP? (Fino ad ora non ho esplorato RTMP, ma voglio sapere se è possibile ottenere latenze sub-secondi con RTMP)
Uno studio comparativo tra streaming basato su WebRTC e HTTP
Per molto tempo, abbassare la latenza di streaming è stato un argomento popolare. Le latenze di decine di secondi, e persino un minuto, sono state conosciute con lo streaming basato su HTTP in passato. Con la latenza tradizionale di trasmissione nei secondi a una cifra e soluzioni emergenti come Servizi di sviluppo WebRTC , La domanda è quale approccio adottare. Lo streaming WebRTC è in grado di fornire video non solo in sotto-secondi, ma in meno di 500 millisecondi. Attualmente è la tecnologia di streaming a bassa latenza disponibile, consentendo una trasmissione praticamente istantanea.
In questa elegante guida, esamineremo come funziona WebRTC e lo confronteremo con HTTP dal punto di vista di a Servizio di streaming video . Iniziamo!
Una rapida carrellata di streaming basato su HTTP e WEBRTC
I protocolli basati su HTTP sono server Web tecnicamente regolari che inviano download progressivi. Usano lo streaming bitrate adattivo per fornire la massima qualità del video possibile e l’esperienza di visualizzazione, indipendentemente dalla connessione, dal software o dal dispositivo. Alcuni dei più comuni protocolli basati su HTTP disponibili includono MPEG-Dash, Apple’S HLS, Adobe HDS e Microsoft Smooth Streaming.
WebRTC è un protocollo robusto supportato da eccellenti strumenti e supporto del settore diffuso. È stato creato per fornire applicazioni con funzionalità di comunicazione in tempo reale (RTC), consentendo di trasferire video, audio o qualsiasi altro tipo di dati. Questa è una distinzione chiave tra i due rispetto allo streaming basato su HTTP, che è orientato al server client.
UDP vs. TCP
I componenti di base, il protocollo di base (UDP) di Internet Protocol Suite Suite (UDP) e il protocollo di controllo della trasmissione (TCP), risiedono entrambi sul livello di trasporto.
La distinzione principale tra UDP e TCP è che TCP richiede una stretta di mano a tre durante la trasmissione dei dati. L’iniziatore (client) richiede che l’accettore (server) stabilisca una connessione, risponde l’accettore e l’iniziatore riconosca la risposta e mantiene una sessione tra le due estremità. Pertanto, il TCP è estremamente credibile e può gestire la perdita e l’ordinamento dei pacchetti.
UDP, d’altra parte, non’T richiede una stretta di mano per iniziare. Trasferisce i dati indipendentemente dai vincoli di larghezza di banda, il che li rende più veloci e rischiosi. Poiché UDP non supporta ritrasmissioni, ordinamento dei pacchetti o controllo degli errori, un HicCup di rete ha il potenziale per contaminare i dati in transito.
I protocolli come WebRTC usano spesso UDP, mentre i protocolli basati su HTTP usano TCP.
Come si immerge WebRTC rispetto allo streaming basato su HTTP?
- Che tipo di latenza stai cercando?
- Quali saranno le dimensioni del pubblico?
- Qual è l’importo massimo che sei disposto a spendere?
Latenza
Le risposte alle domande di latenza dipendono dalla gamma di latenza che si punta.
Gli HL nuovi e migliorati come LL-HLS e LL-Dash hanno una latenza di 3 secondi o meno. Questo è ancora considerato velocemente e sarà sufficiente per la maggior parte dei casi d’uso a bassa latenza. WebRTC, d’altra parte, rimane la soluzione più veloce se il tuo caso d’uso richiede uno streaming in tempo reale. Dal momento che è un protocollo UDP sviluppato per adattarsi completamente a Internet moderno. Supporta 500 ms di latenza in tempo reale.
WebRTC è stato progettato per fornire una comunicazione bidirezionale e in tempo reale. A differenza di HLS, che si basa su TCP, WebRTC si basa sull’UDP. Ciò significa che WebRTC può iniziare senza il client e il server che scambiano informazioni sulla stretta di mano. Di conseguenza, WebRTC è più veloce, ma lo rende anche più suscettibile alle fluttuazioni della rete.
WebRTC è il protocollo da utilizzare se la tua soluzione richiede uno streaming peer-to-peer e in tempo reale. Tuttavia, se hai bisogno di far crescere il tuo pubblico sopra le 50 persone, dovrai riconsiderare la tua strategia.
Rispetto a HLS, il ridimensionamento WebRTC è sostanzialmente più difficile. Tuttavia, questo può essere risolto con un flusso di lavoro ibrido. La tua scelta sarà determinata dal tuo caso d’uso e dalla dimensione del pubblico di destinazione.
Quando si tratta di raggiungere un pubblico enorme, i protocolli basati su HTTP escono in cima. Mentre “CDNS” Per WebRTC esistono, il costo è spesso proibitivo.
Costo
WebRTC è un protocollo gratuito e open source. Ma ricorda come abbiamo parlato del ridimensionamento WebRTC? È del tutto possibile e funziona efficacemente in molti casi d’uso, ma non è economico. Se non hai bisogno di trasmettere in streaming su centinaia di persone, WebRTC è un’ottima opzione. Tuttavia, se vuoi raggiungere un vasto pubblico, dovrai spendere soldi per ulteriori server per ridurre l’onere per il browser.
HLS è forse il metodo di consegna video più economico. Il ridimensionamento con un CDN è facilmente giustificato dal punto di vista dei costi perché impiega infrastrutture HTTP a prezzi accessibili e la tecnologia di rete attuale basata su TCP.
Conclusione
Negli ultimi due anni, il protocollo basato su HTTP e WEBRTC hanno fatto molta strada. Nonostante il fatto, sono entrambe tecnologie all’avanguardia che stanno spingendo l’industria in avanti, ognuna ha il proprio insieme di vantaggi e svantaggi. Nessuna scelta è l’ideale per tutti, ma uno di loro potrebbe essere la soluzione migliore per te.
Alla fine, il protocollo ottimale sarà determinato dalle caratteristiche del progetto, dai dispositivi a cui sarà distribuito e alla scala del tuo pubblico. Quando si sviluppa una soluzione a bassa latenza, tieni a mente queste cose.
Curioso di trovare la soluzione migliore per te? Mettiti in contatto con i nostri esperti di streaming video in diretta!
HTTP, WebSocket, GRPC o WEBRTC: quale protocollo di comunicazione è il migliore per la tua app?
Attiva oggi la tua prova gratuita di 30 giorni e inizia a prototipazione.
- Crea chat video
- Cos’è una SFU
- Protocolli di streaming video
- P2P Conferenziazione video
Condividi l’articolo a:
Quando si sceglie un protocollo di comunicazione per le tue applicazioni, ci sono molte opzioni diverse. In questo post, noi’Dai un’occhiata a quattro soluzioni popolari: Http, WebSocket, GRPC, E WEBRTC. Esploreremo ogni protocollo studiando la tecnologia dietro di esso, cosa’S al meglio usato e i suoi punti di forza e di debolezza.
· Pubblicato 26 settembre 2022
Le nostre forme di comunicazione sono in costante miglioramento: diventare più veloci, più convenienti e più affidabili. La nostra comunicazione si è evoluta dall’invio di messaggi utilizzando i piccioni del corriere, alla posta postale, all’invenzione della rete fissa, alle e -mail e ai messaggi di testo da un piccolo dispositivo che si adatta alle nostre tasche.
In futuro, potremmo persino riunioni di transizione e feste di compleanno in VR (si spera, questo è solo uno scherzo!). Ma la migliore forma di comunicazione dipenderà sempre dalla situazione.
Un breve messaggio di testo è a volte meglio di una lunga e -mail. Altre volte, una videochiamata con il team è il modo migliore per scambiare informazioni. Al contrario, importanti documenti assicurativi devono essere inviati per posta regolari e consegnati in copia cartacea.
Lo stesso vale anche per le tecnologie web e i protocolli che utilizziamo. Diverse applicazioni hanno esigenze di comunicazione diverse.
Panoramica
In questo articolo, noi’Coprirò un po ‘di popolare Protocolli di comunicazione Possiamo usare come sviluppatori ed esplorare i pro e i contro delle diverse opzioni. Nessuna soluzione è migliore di un’altra: ce ne sono solo alcune che sono migliori per una particolare applicazione o problema.
Alcune applicazioni richiedono una connessione peer-to-peer, con bassa latenza e trasferimento di dati elevato, e possono accettare una perdita di pacchetti (informazioni). Altre applicazioni possono pollicare il server su base necessaria e don’b bisogno di ricevere comunicazioni da un peer diverso. Altre applicazioni richiedono una comunicazione in tempo reale con l’affidabilità dei dati.
Un gioco multiplayer online, l’app di messaggistica, il sito Web del blog, l’app della galleria multimediale e il software di videoconferenza hanno tutti livelli diversi di comunicazione e esigenze di dati.
Se stai costruendo una soluzione di streaming video, ci sono anche altre considerazioni, consulta il nostro articolo sui protocolli di streaming video per ulteriori informazioni sulla scelta di quello corretto.
Cos’è un protocollo di comunicazione?
Nella rete di computer, un protocollo è un insieme di regole che regolano il modo in cui i dati vengono scambiati tra i dispositivi. Il protocollo definisce le regole, la sintassi, la semantica e la sincronizzazione della comunicazione e possibili metodi di recupero degli errori.
I protocolli discussi in questo articolo definiscono come il software a strato applicativo interagirà tra loro. Protocolli diversi aderiscono a regole diverse e esso’s essenziale per comprendere i punti di forza e i limiti di ciascuno. In questo articolo, tu’Leggono i seguenti protocolli:
Http (Hypertext Transfer Protocol) è un protocollo dell’applicazione per sistemi informativi distribuiti, collaborativi e ipermediali. HTTP è la base della comunicazione dati per il World Wide Web. Hypertext è un testo strutturato che utilizza collegamenti logici (collegamenti ipertestuali) tra i nodi contenenti il testo. HTTP è il protocollo per lo scambio o il trasferimento di ipertesto.
Http/2 è stato progettato per affrontare le carenze del protocollo HTTP originale e per migliorare le prestazioni. Http/2 è più veloce ed efficiente di http/1.1 e supporta il multiplexing per consentire a più richieste e risposte di essere multiplex su una singola connessione. Altre caratteristiche notevoli includono la compressione dell’intestazione e la spinta del server. Esso’s diventando gradualmente il protocollo predefinito per il traffico web.
WebSocket è un protocollo che consente la comunicazione a due vie tra un client e un server. È una scelta popolare per le applicazioni che gestiscono i dati in tempo reale, come applicazioni di chat, giochi online e streaming dei dati live.
GRPC è un moderno framework RPC open source che utilizza http/2 per il trasporto. È un’ottima scelta per le applicazioni che devono effettuare molte piccole e veloci chiamate API. GRPC genera assistenti di client e server multipiattaforma per molte lingue, rendendo possibile per un’applicazione client di chiamare direttamente un metodo su un’applicazione server su una macchina diversa come se fosse un oggetto locale.
WEBRTC è una tecnologia che consente una comunicazione in tempo reale tra i clienti e consente di stabilire connessioni peer-to-peer dirette. È utilizzato per applicazioni video, chat, condivisione di file e video di streaming video in diretta.
Comprensione di TCP e UDP
Prima di approfondire i livelli di applicazione sopra menzionati, IT’è importante avere una comprensione di base di TCP e UDP, due livelli di trasporto sottostanti che facilitano il trasferimento di dati in modi fondamentalmente diversi.
TCP (protocollo di controllo della trasmissione) è uno standard che definisce come stabilire e mantenere una conversazione di rete via Internet. TCP è il protocollo più comunemente usato su Internet e qualsiasi rete orientata alla connessione. Quando navighi sul Web, il computer invia pacchetti TCP a un server Web. Un server Web risponde inviando pacchetti TCP al tuo computer. Una connessione viene stabilita per la prima volta tra due dispositivi prima che qualsiasi dati venga scambiato e TCP utilizza la correzione degli errori per garantire che tutti i pacchetti vengano consegnati correttamente. Se un pacchetto è perso o corrotto, TCP proverà a rinascinarlo.
UDP (Protocollo utente Datagram) è un protocollo senza connessione e inaffidabile. Non richiede che sia consolidata o mantenuta una connessione e non garantisce che i messaggi vengano consegnati in ordine. Significa che può esserci qualche perdita di dati se un pacchetto non viene inviato o se lo è’S corrotto. UDP viene spesso utilizzato per lo streaming di supporti o applicazioni in tempo reale in cui i pacchetti abbandonati sono meno problematici che garantire la consegna.
Http/1
Esso’è importante avere una comprensione di base della fondazione di tutte le comunicazioni basate su Internet e il trasferimento di dati nel livello dell’applicazione – HTTP (Protocollo di trasferimento ipertestuale).
Comprendere HTTP/1 e i suoi limiti saranno anche importanti prima di poter esplorare gli altri protocolli in modo più dettagliato e apprezzare appieno ciò che forniscono.
Con HTTP, clienti e server comunicano scambiando singoli messaggi. I messaggi che il client inviano sono chiamati richieste e i messaggi inviati dal server sono chiamati risposte. Questi messaggi vengono inviati come messaggi di testo regolari su una connessione TCP. Possono anche essere crittografati usando TLS e inviati utilizzando il protocollo HTTPS.
Un client sarà in genere un browser Web o un’applicazione in esecuzione su un utente’S Telefono o computer, ma potrebbe tecnicamente essere qualsiasi cosa, ad esempio, uno script che striscia siti Web.
Le richieste HTTP possono fluire solo in una direzione, dal client al server. Non c’è modo per il server di avviare la comunicazione con il client; Può solo rispondere alle richieste.
HTTP è perfetto per le tradizionali applicazioni Web e client, in cui le informazioni vengono recuperate su base necessaria. Ad esempio, aggiorni una pagina e viene presentata una richiesta al server per recuperare le informazioni più recenti.
Tuttavia, questo protocollo si è ampliato in modo tale che non fosse originariamente previsto. Nelle sezioni seguenti, noi’Esplorerò alcuni di http/1’limitazioni S.
Http/1 in tempo reale
HTTP/1 è inefficiente quando i messaggi devono essere inviati in tempo reale dal client al server e viceversa. Ad esempio, se sono disponibili nuove informazioni sul server che devono essere condivise con il client, questa transazione può verificarsi solo una volta che il client avvia una richiesta.
Ci sono soluzioni alternative per questo, utilizzando tecniche chiamate sondaggi corti e lunghi, nonché eventi di Server-Sent.
Polling breve
Il breve polling HTTP è una tecnica in cui il client invia ripetutamente richieste al server fino a quando non risponde con nuovi dati. Una volta che riceve i dati, avvia il processo e chiede ripetutamente fino a quando non è disponibile qualcos’altro.
Questa è una strategia di comunicazione in tempo reale inefficiente, in quanto spreca molte risorse trasmettendo e analizzando continuamente richieste/risposte HTTP.
Lungo polling
Con il sondaggio lungo HTTP, viene effettuata una singola richiesta dal client e quindi il server mantiene aperta tale connessione fino a quando non sono disponibili nuovi dati e una risposta può essere inviata. Dopo che il client ha ricevuto la risposta, una nuova connessione viene immediatamente effettuata.
Il sondaggio a lungo è più efficiente del breve polling ma non è una soluzione ottimale per la comunicazione in tempo reale.
Server-Sent Events (SSE)
Gli eventi Server inviati consentono a un client di trattenere una connessione e ricevere aggiornamenti (Push Message) da un server in tempo reale, senza dover power al server per nuovi dati costantemente. Questa è una connessione a senso unico, quindi non è possibile inviare eventi dal client al server.
SSE è uno standard che descrive come i server possono avviare la trasmissione di dati verso i client una volta stabilita una connessione client iniziale.
Il problema delle prestazioni con http/1
La maggior parte dei flussi di dati HTTP è costituita da piccoli trasferimenti di dati bursty, mentre il TCP è ottimizzato per connessioni di lunga durata e trasferimenti di dati in blocco. Il tempo di andata e ritorno di rete è il fattore limitante nella velocità di trasmissione TCP e nelle prestazioni nella maggior parte dei casi. Di conseguenza, la latenza è il collo di bottiglia delle prestazioni e la maggior parte delle applicazioni Web lo consegna.
Ciò che sopra significa che TCP, che usa HTTP, è stato costruito per gestire connessioni di lunga durata e trasferire molti dati. Http/1, d’altra parte, aprirebbe un sacco di connessioni TCP di breve durata e di solito inviare solo piccoli pezzi di dati.
Blocco della testa
Un problema di prestazioni con HTTP/1.0 è che devi aprire una nuova connessione TCP per ogni richiesta/risposta. Questo non era un problema per ciò per cui HTTP è stato inizialmente inventato – per recuperare un documento ipertestuale. La parte del documento è importante perché HTTP non era pensato per “ipermedia”.
L’apertura di una nuova connessione TCP per ogni richiesta è diventato un problema quando il web si è evoluto. Abbiamo iniziato a costruire applicazioni complete anziché semplici pagine Web e il numero di media e file un browser necessario per recuperare è diventato di più. Immagina una tipica applicazione Web che richiede un file HTML, CSS e JavaScript, nonché varie immagini e altre risorse. Per ogni file, è stata stabilita una nuova connessione.
Lungo arriva http/1.1, che ha connessioni persistenti che definiscono che possiamo avere più di una richiesta o risposta sulla stessa connessione TCP.
Questa soluzione è sicuramente un miglioramento, ma non consente al server di rispondere contemporaneamente con più risposte. Esso’S un protocollo serializzato in cui è necessario inviare una richiesta e attendere la risposta, quindi inviare la seconda richiesta e così via. Questo è noto come blocco della testa.
È, tuttavia, possibile ottenere un po ‘di parallelismo, poiché un browser può aprire fino a sei connessioni TCP alla stessa origine – dove “origine” è definito come la combinazione unica di ospite E porta numero.
Ad esempio, se si dispone di un’app della galleria fotografica che deve caricare 12 immagini, verranno fatte sei richieste per caricare le prime sei immagini e ogni richiesta aprirà una nuova connessione TCP sotto il cofano. Le altre sei immagini verranno bloccate fino a quando non viene ricevuta una risposta e una delle connessioni aperte può essere utilizzata per caricare l’immagine successiva. Le connessioni TCP Open Open originali alla stessa origine verranno riutilizzate in quanto saranno disponibili, ma sei limitato a sei connessioni attive.
Naturalmente, i programmatori hanno trovato una soluzione facile – cambiando l’origine. Invece di ospitare tutte le risorse sulla stessa origine, ospiti sei immagini su un’origine e il resto su un’altra. Ora puoi avere 12 richieste simultanee (o aprire connessioni TCP). Questo è indicato come “sharding”.
- immagini 1-6 sono ospitati su 1.immagini.com
- immagini 7-12 sono ospitati su 2.immagini.com
C’è una limitazione su quante volte puoi farlo, e questo’è difficile determinare un numero ottimale di frammenti. Ad un certo punto, l’aggiunta di più frammenti aumenterà la complessità, aggiungerà sovraccarico e potrebbe comportare i collegamenti che si congesgono e si perdono i pacchetti.
Ci sono anche altre preoccupazioni, poiché ogni connessione TCP aggiunge inutili spese generali al server. Le connessioni competono tra loro, ogni handshake TCP e TLS aggiunge costi non necessari e altre risorse di server/proxy devono essere utilizzate per mantenere le connessioni attive. Vi è una chiara limitazione nel modo in cui HTTP/1 utilizza le connessioni TCP sottostanti.
Testani e biscotti gonfio
Un altro problema è che man mano che le specifiche HTTP si sono evolute, sono state aggiunte più intestazioni alla specifica. Gli sviluppatori hanno anche la possibilità di aggiungere cookie alle intestazioni e questi possono essere arbitrariamente grandi. Questo aggiunge molto gonfiore, poiché ogni richiesta e risposta deve trasmettere tutte queste informazioni di testo e HTTP/1.1 non include un meccanismo per comprendere le intestazioni e i metadati.
Se hai bisogno di un protocollo RPC ad alte prestazioni, questo sovraccarico si aggiunge rapidamente e HTTP non è più una soluzione ottimale.
Priorità
Con http/1.1, browser “priorità” risorse tenendo una coda prioritaria sul cliente e prendendo ipotesi istruite su come sfruttare al meglio le connessioni TCP disponibili. I browser hanno incorporato l’euristica per determinare quali risorse sono più preziose di altre.
Ad esempio, il caricamento di CSS avrà una priorità più elevata rispetto al caricamento delle immagini.
Il problema è che non c’è modo per te, in quanto sviluppatore, di dare la priorità a una richiesta su un’altra o di modificare la priorità di un messaggio in corso. Quale contenuto viene caricato per primo dipende dal browser e non hai voce in capitolo nello schema di priorità.
Http/2
HTTP/2 è una versione migliorata del protocollo HTTP e affronta tutti i problemi di prestazione descritti sopra con HTTP/1 e aggiunge altri miglioramenti senza modificare la semantica (verbi, intestazioni, ecc.).
La variazione più significativa in HTTP/2 è l’uso del multiplexing per inviare e ricevere contemporaneamente più richieste e risposte HTTP su a connessione TCP singola. Tutte le connessioni HTTP/2 sono persistenti e è richiesta una sola connessione per origine. Ciò consente un uso molto più efficiente delle risorse di rete e può migliorare significativamente le prestazioni delle applicazioni.
Alcuni altri vantaggi di HTTP/2:
- Utilizza la compressione dell’intestazione per ridurre le dimensioni delle intestazioni, il che evita di inviare più e più volte le stesse testate di testo. Ciò riduce significativamente il sovraccarico di richieste/risposte e la quantità di dati inviati.
- Abilita la priorità, consentendo al cliente (sviluppatore) di specificare la priorità delle risorse necessarie. Esso’S anche possibile aggiornare la priorità delle richieste in corso, ad esempio su scorrimento, se un’immagine non è più visibile, la priorità può cambiare.
- Utilizza Server Push per inviare i dati al client prima che lo richieda. Questo può essere utilizzato per migliorare i tempi di caricamento eliminando la necessità per il client di effettuare più richieste.
Come funziona http/2?
L’unità di protocollo di base in HTTP/2 è a telaio. Questo nuovo meccanismo di inquadratura binaria modifica il modo in cui i dati vengono scambiati tra il client e il server.
Lo standard definisce dieci diversi tipi di frame, ciascuno dei quali serve uno scopo diverso. Ad esempio, le intestazioni e i frame di dati costituiscono la base delle richieste e delle risposte HTTP:
UN telaio è la più piccola unità di comunicazione che porta un tipo specifico di dati.
Alcuni altri esempi di fotogrammi sono:
- Impostazioni: scambiare informazioni di impostazione all’inizio o durante una connessione.
- Priorità: riassegnare la priorità per i messaggi.
- Push_promise: consente al server di spingere i dati a te: questo funge da promessa di ciò che il server invierà. Ad esempio, se richiedi l’indice.HTML, il server può creare un push_promise che promette di spingere l’app.js e stili.CSS, il che significa che il cliente non ha bisogno di richiedere tali risorse.
I frame sono combinati per formare a Messaggio, Ad esempio, l’intestazione e la cornice di dati nell’immagine sopra. Ciò equivale a una normale richiesta o risposta.
Poi infine, una serie di messaggi può far parte di a flusso. Ciò consente un flusso di dati bidirezionale tra client e server e multiplexing completo di richiesta e risposta.
L’immagine sopra è un po ‘fuorviante, dando l’impressione che siano aperte più connessioni tra client e server. Ma è una singola connessione TCP e i dati fluiscono liberamente tra il client e il server in modo non bloccante.
Il nuovo livello di inquadratura binaria consente al client e al server di abbattere il messaggio HTTP in frame indipendenti, intrecciarli e quindi riassemblarli dall’altra parte.
Questo è solo un riepilogo di come http/2.0 Works. Se vuoi saperne di più ed esplorare la priorità, la spinta del server e la compressione dell’intestazione, consulta questo articolo approfondito. Per una storia dei problemi di http/1 e come http/2 li risolve, guarda questo video.
Streaming dati bidirezionale HTTP/2
- Una singola connessione HTTP/2 può contenere più flussi contemporaneamente aperti, con entrambi i frame interleaving endpoint da più flussi.
- I flussi possono essere stabiliti e utilizzati unilateralmente o condivisi dal client o dal server.
- I flussi possono essere chiusi da entrambi gli endpoint.
Vi è un sacco di malintesi con la funzionalità push del server, che consente a un server su HTTP/2 di inviare in modo proattivo risorse che ritiene di aver bisogno, ad esempio, il .js e .file CSS, senza che il client lo richieda. Questo non ha nulla a che fare con lo streaming bidirezionale ed è solo una tecnica di ottimizzazione del web per risorse memorizzate.
Ciò che è vero è che con http/2 il server può’t Iniziare a flusso. Ma una volta che il client apre un flusso inviando una richiesta, entrambe le parti possono inviare dati cornici su una presa persistente in qualsiasi momento. Un eccellente esempio di questo è GRPC, di cui discuteremo più avanti.
Con HTTP/2, è possibile raggiungere lo streaming dei dati bidirezionali e si potrebbe sostenere che esso’è una soluzione più ottimale di qualcosa come WebSockets, o potresti sostenere che non lo è. Noi’ne discuterò più dettagliatamente nella sezione WebSocket.
Websockets
L’obiettivo di questa tecnologia è fornire un meccanismo per le applicazioni basate sul browser che necessitano di comunicazioni a due vie con server che non si basano sull’apertura di più connessioni HTTP (E.G., Usando XMLHTTPREQUEST o iFrames e Long Polling).
WebSocket sono stati inventati per abilitare la comunicazione a tutto duplex tra un client e un server, il che consente ai dati di viaggiare in entrambi i modi attraverso un’unica connessione aperta immediatamente.
Una volta stabilita una connessione WebSocket, il client non ha bisogno di pollicare un server per gli aggiornamenti. Invece, la comunicazione accade in modo bidirezionale. Ciò migliora la velocità e la capacità in tempo reale rispetto all’originale a lungo e short polling di HTTP/1. WebSocket non ha un formato a cui è conforme. È possibile inviare qualsiasi dati, testo o byte: questa flessibilità è uno dei motivi per cui i websocket sono popolari.
Parte di questo può sembrare familiare a ciò che abbiamo discusso nella sezione HTTP/2, ma è’è importante notare che i websocket sono stati inventati molto prima di http/2. Noi’Confrontali più tardi.
Come funzionano i websocket
WebSockets eseguiti efficacemente come livello di trasporto su TCP.
Per stabilire una connessione WebSocket, il client e il server devono prima eseguire una stretta di mano su un normale HTTP/1.1 connessione. Questa stretta di mano è il ponte da HTTP a WebSockets.
Di seguito è riportata una richiesta di esempio per la mano del client. Il client può utilizzare un http/1.1 meccanismo chiamato intestazione di aggiornamento per cambiare la loro connessione da HTTP a WebSockets:
Ottieni /chat http /1.1 host: esempio.com: 8000 upgrade: WebSocket Connection: aggiornamento Sec-WebSocket-key: dghlihnhbxbszsbub25jzq == sec-websocket-wirson: 13
Il server concluderà quindi la stretta di mano con una risposta speciale che indica che il protocollo cambierà da HTTP a WebSocket:
Http/1.1 101 Protocolli di commutazione Upgrade: WebSocket Connection: Aggiorna Sec-WebSocket-Accept: S3PPLMBITXAQ9KYGZZHZRBK+XOO =
WebSockets richiede un identificatore di risorse uniforme (URI) con uno schema WS: // o WSS: //. Lo schema WS: // viene utilizzato per connessioni non crittografate e lo schema WSS: // viene utilizzato per connessioni crittografate, simile a come gli URL HTTP usano http: // o https: //.
Una volta stabilito il canale di comunicazione a due vie, il client e il server possono inviare messaggi avanti e indietro. Questi messaggi possono essere qualsiasi cosa, dai dati binari al testo. La connessione WebSocket rimarrà aperta fino a quando il client o il server si disconnetteranno.
WebSocket Multiplexing
Al momento della stesura, il protocollo WebSocket non supporta il multiplexing integrato. Abbiamo discusso del multiplexing nella sezione HTTP/2 e l’abbiamo appreso’s una funzione integrata per http/2 e esso’s possibile avere più flussi multiplexi sulla stessa connessione. Ogni flusso ottiene un identificatore univoco e tutti i frame inviati hanno un ID associato al flusso corrispondente.
Non supportare il multiplexing significa che il protocollo WebSocket richiede una nuova connessione di trasporto per ogni connessione WebSocket. Ad esempio, più client in esecuzione in diverse schede dello stesso browser si tradurranno in connessioni separate. Avere un multiplexing sui websocket è in genere qualcosa che dovrai implementare come sviluppatore o fare affidamento su un plug-in o una libreria di terze parti.
WebSocket vs http/2
Quindi, ha sostituito HTTP/2 websocket? La risposta breve è no. La risposta più lunga è che HTTP/2 rende possibile lo streaming bidirezionale e, di conseguenza, i websocket non sono l’unica/migliore opzione. Http/2 come specifica fa più lavoro per te rispetto ai websocket. Ha un multiplexing integrato e, nella maggior parte dei casi, comporterà un minor numero di connessioni TCP aperte all’origine. D’altra parte, WebSockets fornisce molta libertà e non sono restrittivi nel modo in cui i dati vengono inviati tra il client e il server una volta stabilita una connessione. Tuttavia, dovrai gestire la riconnessione da soli (o fare affidamento su una biblioteca che lo fa per te).
Quale è in definitiva migliore e dove uno funzionerà e l’altro non è in discussione, e questo articolo non fornisce una risposta supponente. WebSockets offre molta flessibilità e, come standard consolidato, è pienamente supportato da tutti i browser moderni e l’ecosistema attorno alle librerie client e server è robusto.
Per discussioni più dettagliate e supponenti, consultare queste domande di overflow dello stack:
- Http/2 rende obsoleto WebSocket
- Http/2 o websocket per messaggi client a bassa latenza a server
- HTTP/2 VS Web Socket per streaming di messaggi bidirezionali
C’è anche un RFC per consentire un meccanismo per l’esecuzione del protocollo WebSocket su un singolo flusso di una connessione HTTP/2.
Essere in grado di bootstrap WebSocket da HTTP/2 consente di condividere una connessione TCP da entrambi i protocolli e estende l’uso più efficiente di HTTP/2 in rete a WebSocket.
Questo è stato implementato in Chrome e Firefox. Puoi leggere il documento di design di Chrome e la motivazione qui.
Quando dovresti utilizzare WebSockets?
I websocket sono più adatti alle applicazioni che necessitano di comunicazioni a due vie in tempo reale e quando devono essere trasmessi rapidamente piccoli dati, ad esempio: ad esempio:
- Applicazioni di chat
- Giochi multiplayer
- Applicazioni di modifica collaborativa
- Ticker sportivo dal vivo
- Applicazione di trading azionarie
- Feed di attività in tempo reale
Per coincidenza, questa è un’area in cui il nostro team ha molta esperienza. Noi’Riempeità utilizzando WebSocket per alimentare la nostra chat e le attività di feed di attività.
Il supporto per WebSockets è buono ed è stato supportato da principali browser e clienti per molto tempo ed è anche ben documentato e facile da usare. Tuttavia, i websocket non dovrebbero essere abusati; A seconda di ciò che vuoi, potrebbero esserci alternative migliori.
Ad esempio, il server inviato eventi (SSE) è efficiente su HTTP/2 e semplice da usare. SSE non è un sistema di comunicazione bidirezionale; Il server spinge unilateralmente i dati al client. Ma se tutto ciò di cui hai bisogno è un modo per il server di inviare dati a un client, questa è potenzialmente un’opzione migliore rispetto ad aggiungere il sovraccarico di websocket. SSE ricade anche su HTTP/1.1 quando HTTP/2 non è disponibile. Inoltre, il client (o browser) gestisce la connessione per l’utente e supporta la riconnessione automatica.
Se si perde una connessione su WebSocket, non ci sono meccanismi inclusi per il bilanciamento del carico o per la riconnessione. Questo deve essere implementato manualmente o da librerie di terze parti.
GRPC
GRPC è un framework RPC (RPC) moderno ad alte prestazioni open source che può essere eseguito in qualsiasi ambiente. Può collegare in modo efficiente i servizi nei data center con supporto collegabile per il bilanciamento del carico, la traccia, il controllo della salute e l’autenticazione. È inoltre applicabile nell’ultimo miglio di calcolo distribuito per connettere dispositivi, applicazioni mobili e browser ai servizi di backend.
GRPC è un sistema RPC open source, basato sul contratto inizialmente sviluppato su Google. GRPC consente alle applicazioni di comunicare in modo trasparente e semplifica la costruzione di sistemi connessi.
Genera assistenti di client e server multipiattaforma per molte lingue, rendendo possibile per un’applicazione client di chiamare direttamente un metodo su un’applicazione del server su una macchina diversa come se fosse un oggetto locale.
Costruito su HTTP/2, GRPC leva funzionalità come lo streaming bidirezionale e la sicurezza del livello di trasporto integrato (TLS).
motivazione GRPC
Esso’è importante immergersi nella motivazione alla base di GRPC e perché è stato inventato per capire i suoi benefici. Perché non usare la tecnologia esistente che già abbiamo: http/2 e websocket, ad esempio? Perché abbiamo bisogno di un altro livello di astrazione in cima a quello che già abbiamo?
Esistono vari modi in cui i dati possono essere strutturati e inviati su Internet. Alcuni esempi popolari sono sapone, riposo e graphql. Puoi anche creare il tuo protocollo, inviare dati su TCP grezzo e gestire tu stesso l’implementazione se lo desideri.
Ma non importa quello che scegli come protocollo di comunicazione, il problema è che è necessario assicurarsi che il client e il server siano d’accordo sul protocollo. Ad esempio, se tu’RE Creazione di un’API REST, la libreria client che è necessario utilizzare per inviare i dati di riposo è la libreria HTTP. La libreria HTTP è integrata nel browser per impostazione predefinita e il browser gestisce tutto per te:
- Stabilisce la comunicazione con il server.
- Gestisce HTTP/2 e fallback su http/1. E dovrà supportare HTTP/3 in futuro.
- Gestisce TLS e negozia il protocollo.
- Gestisce intestazioni, corsi d’acqua e tutto il resto.
Ma cosa succede se tu’non essere su un browser? E se tu’Re un’applicazione Python in esecuzione su alcuni server, una CLI GOlang o un’applicazione Flutter in esecuzione su iOS? Tutti questi clienti hanno bisogno della propria libreria HTTP che capisca il protocollo con cui stai comunicando.
Fortunatamente, molte persone dedicate stanno lavorando a varie biblioteche HTTP per tutte queste lingue e quadri. Alcune lingue hanno persino più librerie HTTP con funzionalità diverse. Tutto questo, tuttavia, ha un costo – e questa è la manutenzione.
Questo costo potrebbe influenzarti nel caso in cui dovessi, ad esempio, aggiornare il tuo server a HTTP/2 se la libreria Golang che usi la supporta. Ma, sul tuo client Python front-end, la libreria HTTP equivalente non ha implementato HTTP/2 o potrebbe non essere più mantenuto. Diverse librerie HTTP in altre lingue non possono essere confrontate 1: 1.
Man mano che le specifiche HTTP si evolve, queste librerie devono tenere il passo con progressi, problemi di sicurezza, nuove funzionalità e altre patch. HTTP è solo un esempio e lo stesso vale per il protocollo WebSocket o per qualsiasi altro. Qualcosa può essere ben implementato nei principali browser, ma tale funzionalità deve essere portata in più lingue e framework diversi.
Come è diverso GRPC?
GRPC tenta di risolvere questo problema mantenendo la biblioteca per le lingue popolari stesse, il che significa che le nuove funzionalità aggiunte saranno supportate da tutte queste lingue.
Sotto il cofano, GRPC utilizza http/2 come protocollo, tuttavia questa implementazione è nascosta da te. In futuro, i manutentori di GRPC potrebbero facilmente sostituire HTTP/2 con HTTP/3 e trarrai immediatamente beneficio da tale modifica.
GRPC utilizza anche i buffer di protocolli come lingua di definizione dell’interfaccia (IDL) e il suo formato di interscambio di messaggi sottostanti. Questo formato è neutrale alla lingua e consente di comunicare facilmente tra diversi linguaggi di programmazione. Noi’Esplorerò questo concetto di più nella prossima sezione.
Cosa sono i buffer di protocollo?
I buffer di protocollo sono meccanismo neutro, neutro e estensibile neutro di Google per la serializzare i dati strutturati-Pensa a XML, ma più piccolo, più veloce e più semplice. Definite come vuoi che i tuoi dati siano strutturati una volta. Quindi puoi utilizzare un codice sorgente generato speciale per scrivere e leggere facilmente i tuoi dati strutturati da e verso una varietà di flussi di dati e utilizzando una varietà di lingue.
Tradizionalmente con un’API, non’T ha un contratto definito dal protocollo stesso. Ad esempio, se tu’sta usando il riposo, tu’in genere in genere inviare solo messaggi JSON con coppie chiave/valore che non’T controllato fino a quando il messaggio non è all’estremità ricevente. Questo messaggio può essere in genere qualsiasi cosa, e questo’sie a te per assicurarti che la struttura corretta sia definita.
Dai un’occhiata al seguente payload JSON:
‘id’: 123 ‘nome’: ‘Gordon’, ‘e-mail’: ‘Gordon@da qualche parte.io’
Una volta ricevuti questi dati sul client/server, ad esempio possono essere deserializzati in un oggetto:
persona di classe
Tuttavia, dipende da te come sviluppatore implementare la corretta logica di serializzazione e deserilizzazione per il payload sopra menzionato – ciò può comportare la scrittura manuale di TOJSON e Fromjson, basandosi sulla generazione del codice o potrebbe essere una caratteristica integrata della lingua’sta usando.
Indipendentemente da come seriali questi dati, il codice sottostante dovrà essere aggiornato manualmente, potenzialmente in più ambienti, nel caso in cui lo schema cambi.
Con i buffer di protocollo, si crea uno schema che definisce il tipo di oggetto per i campi e specifichi quali sono richiesti e quali sono opzionali:
// Il messaggio di richiesta contenente la persona’S Messaggio di informazione persona < optional int32 required string name = 2; optional string email = 3; >// Il messaggio di risposta contenente il messaggio di saluto
È quindi possibile specificare le procedure che si desidera esporre.
// la definizione del servizio di saluto. Servizio Greeter < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
Una volta tu’VE Specificato le strutture e lo schema dei dati, si utilizza la protocollo del compilatore buffer protocollo per generare classi di accesso ai dati nelle vostre lingue preferite dalla tua definizione Proto.
Queste saranno interfacce che descrivono gli oggetti descritti nel file proto, con accessori per ciascun campo, nonché metodi per serializzare/analizzare l’intera struttura da/da byte grezzi.
Modalità GRPC
Esistono quattro modalità di trasporto su GRPC. Queste quattro modalità replicano il comportamento che abbiamo discusso in precedenza, ad esempio, una normale richiesta/risposta, SSE e WebSocket.
RPC unario
UNARY RPC è una semplice richiesta e risposta, simile a chiamare una funzione. Il client chiede alcuni dati e il server esegue un po ‘di elaborazione e restituisce tali dati.
Server streaming rpc
RPC di streaming del server in cui il client invia una singola richiesta al server e si aspetta più o un flusso di risposte. Il client legge dal flusso restituito fino a quando non ci sono più messaggi.
Un esempio sarebbe lo streaming video, in cui richiedi di caricare un video e il server risponde con il flusso video.
Client Streaming RPC
RPCS di streaming client in cui il client scrive una sequenza di messaggi e li invia al server, utilizzando nuovamente uno stream fornito. Una volta che il client ha finito di scrivere i messaggi, attende che il server li legga e restituisca la sua risposta.
Un esempio sarebbe quello di caricare un grande file sul server e una volta inviato tutti i dati, il client può inviare un messaggio finale per indicare che il caricamento è completo e il server può opzionalmente rispondere.
Stream bidirezionale RPC
Una combinazione di streaming sia client che server. Un’applicazione di chat o un videogioco multiplayer è un esempio in cui i dati devono fluire liberamente tra client e server.
RPC in streaming bidirezionale in cui entrambi i lati inviano una sequenza di messaggi utilizzando un flusso di lettura. I due flussi operano in modo indipendente, in modo che client e server possano leggere e scrivere in qualsiasi ordine che piacciano.
In un RPC in streaming bidirezionale, la chiamata è avviata dal client invocando il metodo. L’elaborazione del flusso lato client e server è specifica dell’applicazione. Poiché i due flussi sono indipendenti, il client e il server possono leggere e scrivere messaggi in qualsiasi ordine.
Microservizi
Un buon esempio di dove GRPC è potente è all’interno dei microservizi.
In questo esempio, abbiamo microservizi scritti in Python, Java e Golang. Questi devono inviare dati tra loro.
Usando http/1.1 e JSON richiederà di implementare le connessioni HTTP e la serializzazione per ogni lingua. Dovrai anche assicurarti che lo schema sia implementato correttamente per ogni lingua e, se l’API cambia, tutti i servizi devono essere aggiornati manualmente.
GRPC, d’altra parte, gestisce l’implementazione di HTTP/2.0 protocollo per noi. Viene scritto un singolo schema e il codice corrispondente può essere generato per tutte le lingue utilizzate. Questo schema può essere visto come un contratto a cui tutte le lingue devono aderire, rendendo la comunicazione tra questi servizi molto più semplice e più affidabile.
Performance GRPC
Il GRPC è veloce ed è generalmente molto più performante di un riposo equivalente:
- I buffer di protocollo sono serializzati e inviati come binari sul filo, che sono significativamente più piccoli dei normali messaggi JSON.
- GRPC utilizza http/2.0 che offre ulteriori miglioramenti
Il GRPC che comprime in modo efficiente i dati inviati ha un vantaggio significativo, poiché minore è trasmesso il carico utile dei dati, sono necessari meno viaggi rotondi TCP. L’unità di trasmissione massima (MTU) è una misurazione che rappresenta il più grande pacchetto di dati che accetterà un dispositivo connesso alla rete, che è 1.500 byte.
La compressione viene gestita per te e ne trai beneficio semplicemente usando GRPC. In alternativa, è possibile utilizzare qualcosa come GZIP per comprimere i messaggi JSON prima di inviare HTTP normale. Tuttavia, questo può essere scomodo e aggiunge un livello di complessità. Lingue e ambienti diversi possono anche avere diversi livelli di supporto per GZIP e altri strumenti di compressione equivalenti. E per ogni lingua che usi, dovrai rimborsare tu stesso la corretta logica di compressione e comunicazione. Questo è un problema simile a quello che abbiamo discusso della libreria HTTP.
Quando dovresti usare GRPC?
Se tu’Re utilizza più linguaggi di programmazione diversi che devono integrarsi strettamente tra loro e richiedono comunicazioni rapide e frequenti che inviano molti dati, quindi GRPC sarebbe perfetto.
- Con lo streaming GRPC, esso’s possibile determinare facilmente i progressi di caricamento/download – senza dover effettuare richieste non necessarie per gli aggiornamenti.
- Esso’è possibile annullare le richieste.
- Tutti i vantaggi di HTTP/2.
- Se GRPC supporta la tua lingua, non’deve preoccuparsi delle librerie esterne.
- GRPC non supporta tutte le lingue.
- Lo schema può sentirsi restrittivo e ingombrante.
- Può essere complicato da configurare rispetto ai websocket.
- Ancora giovani e errori possono essere difficili da eseguire il debug.
- La comunicazione con GRPC non funziona in modo nativo fuori dalla scatola con browser Web. È necessario utilizzare la libreria GRPC-Web.
WEBRTC
Il protocollo WebRTC è un progetto gratuito e open source che fornisce funzionalità di comunicazione in tempo reale (RTC) all’applicazione che funziona in cima a uno standard aperto. Supporta dati video, vocali e generici inviati tra i peer.
La tecnologia è disponibile come insieme di API Javascript per tutti i principali browser e una libreria per clienti nativi come le applicazioni Android e iOS.
WebRTC è diverso da WebSockets e GRPC in modo fondamentale, e cioè una volta stabilita una connessione, i dati possono (in alcune circostanze) essere trasmessi direttamente tra browser e dispositivi in tempo reale senza toccare il server.
Ciò riduce la latenza e rende WebBRTC ottimo per la condivisione audio, video o schermo – dove la bassa latenza è importante e devono essere inviati molti dati.
Motivazione WebRTC
WebRTC intende standardizzare il modo in cui i media, come audio e video, vengono comunicati sul filo e di realizzarlo convenientemente con un’API semplice da usare.
Altre soluzioni, come WebSocket, consentono di trasmettere qualsiasi dati tra due pari; Tuttavia, questi dati devono essere trasmessi tramite un proxy o un server. Fare affidamento su un altro server aggiunge latenza, poiché tutto ciò che viene inviato deve essere esaminato, elaborato e decrittografato. C’è un mezzo di mezzo tra i due coetanei. Per lo streaming video o anche la chat in tempo reale, questa latenza è indesiderabile.
I browser sono anche più potenti ora di qualche anno fa. I browser hanno accesso alla webcam e al microfono, che richiedono un’API integrata e un modo semplice per trasmettere queste informazioni ricche. WEBRTC ha lo scopo di semplificare l’intero processo ed esporre in modo nativo una API di facile utilizzo disponibile sui browser.
Il problema con WebRTC
La motivazione è definita e sembra che WebRTC sia una soluzione magica che consente una comunicazione più veloce tra due colleghi. Ma purtroppo ci sono alcuni problemi.
Il primo problema è che stabilire una connessione peer-to-peer non è semplice: Internet è complicato e ci sono molti router, proxy e firewall tra Alice in California e Ben in Sudafrica. E in alcune circostanze, potrebbe non essere possibile avere una linea diretta tra due pari. Una connessione tra due colleghi potrebbe aver bisogno di bypassare un firewall che impedisce connessioni aperte, potresti potenzialmente non avere un indirizzo IP pubblico o il router potrebbe non consentire una connessione diretta tra i coetanei.
Il secondo problema è che deve esserci un modo per due colleghi di scoprirsi e determinare il percorso ottimale in cui può accadere la comunicazione. Ciò richiede che alcune informazioni siano condivise tra i due clienti prima di poter sapere come comunicare meglio tra loro – e un modo comune per condividere queste informazioni è utilizzando WebSockets.
Che è un po ‘divertente. UN Http La connessione viene aggiornata a un WebSocket connessione solo per condividere informazioni per stabilire un file WEBRTC connessione.
Se vuoi davvero apprezzare ciò che fa WebRTC e la sua complessità, dovrai acquisire familiarità con alcuni termini potenzialmente non familiari: Nat, stordizione, turno, ghiaccio, SDP e segnalazione.
Come funziona WebRTC?
Nella panoramica sopra, abbiamo descritto la motivazione di WebRTC, che descrive l’idea di base di come funziona. Questa sezione si tuffa in alcuni degli argomenti di livello inferiore che devi capire per cogliere completamente WebRTC.
Traduzione dell’indirizzo di rete (NAT)
Comprendere cos’è NAT e come funziona è essenziale per comprendere WebRTC.
Un NAT viene utilizzato per fornire al tuo dispositivo (laptop o telefono cellulare) un indirizzo IP pubblico; Questo è importante perché vogliamo stabilire una connessione tra due coetanei che sono probabilmente entrambi dietro un router. Un router avrà un indirizzo IP pubblico e ogni dispositivo collegato al router avrà un indirizzo IP privato.
Questi dispositivi non sono’T esposto direttamente a Internet. Invece, tutto il traffico attraversa il router, che comunica con il mondo esterno. Quando richiedi risorse da un server remoto, il router è responsabile “routing” La richiesta dalla macchina locale a quel server e instrada la risposta dal server al computer locale.
Queste richieste sono tradotte dal dispositivo’S Indirizzo IP privato al router’S Public IP con una porta unica – che viene quindi memorizzata in un tavolo NAT. In questo modo, non è necessario avere un IP pubblico unico per ciascun dispositivo su una rete locale.
L’immagine sopra è un esempio semplicistico di come sarebbe una tabella NAT. Permettere’s fingi il dispositivo locale, con un IP privato di 192.168.1.50, richiede l’indirizzo pubblico 82.88.31.26:80 per alcuni dati.
Ciò viene realizzato dal dispositivo locale per prima inviando la richiesta al router, che instrada la richiesta al dispositivo remoto. Il router dice quindi al dispositivo remoto di inviare la risposta al suo indirizzo IP esterno, con una porta univoca, che in questo esempio è 86.88.71.25: 8830.
Questa porta unica è importante in quanto consentirà al router di determinare quale dispositivo locale ha fatto la richiesta. Tutte queste informazioni sono archiviate in una tabella NAT. Una volta che il router ottiene la risposta, può eseguire una ricerca e decidere quale dispositivo locale la risposta dovrebbe essere inoltrata.
Questo è abbastanza semplice da capire quando abbiamo una normale coppia di richieste/risposta: un dispositivo e un server. Ma cosa succede se un altro dispositivo esterno con un indirizzo IP completamente diverso decide di inviare pacchetti all’indirizzo IP esterno del router sulla stessa porta precedentemente utilizzata? Se il router lo inoltra al dispositivo locale mappato a quel numero di porta?
Questa decisione dipende da quale traduzione NAT utilizza il router e alla fine determina se è possibile stabilire una connessione peer-to-peer. A seconda del router che usi, implementerà una traduzione NAT diversa. Esistono quattro diversi metodi di traduzione NAT:
- Nat one-to-one
- Indirizzo NAT limitato
- Porta limitata Nat
- Nat simmetrico
Nat one-to-one: Mappa un indirizzo IP esterno e porta (di solito pubblico) a un indirizzo IP interno e porta (solitamente privato). Nell’esempio sopra, se il router riceve una risposta sulla porta 8830 e IP esterno 86.88.71.25, Lo inoltrerà al dispositivo locale 192.168.1.50, così come questo è il dispositivo locale che ha fatto la richiesta (informazioni recuperate dalla tabella NAT). Il router non si preoccupa dell’IP di destinazione o di dove la risposta ha avuto origine. Se’s su una porta esterna particolare va a quel dispositivo locale.
Indirizzo NAT limitato: Un dispositivo remoto può inviare un pacchetto al dispositivo locale solo se il dispositivo locale aveva precedentemente inviato un pacchetto all’indirizzo IP remoto. In sintesi, lo permettiamo solo se abbiamo comunicato con questo host prima. Nell’esempio sopra, consenti solo ai pacchetti di 86.88.71.25.
Porta limitata Nat: Lo stesso dell’indirizzo limitato NAT, ma la restrizione include anche i numeri di porta. Il dispositivo remoto può inviare un pacchetto al dispositivo interno solo se il dispositivo interno aveva precedentemente inviato un pacchetto all’indirizzo IP X e Porta P. Nell’esempio sopra, consentire solo da 86.88.71.25 e porto 80.
Nat simmetrico: Il più restrittivo. Per questo il IP esterno, porta esterna, IP di destinazione, E porto di destinazione Tutti devono abbinare ciò che è presente nella tabella NAT. Ciò significa che i pacchetti possono essere inviati a una porta specifica di un dispositivo locale solo se quel dispositivo era quello che richiedeva l’IP e la porta di destinazione.
WebRTC non funziona su NAT simmetrico e per capire perché dobbiamo capire cos’è un server stordente.
Session Traversal Utilities per NAT (stordimento)
STENT è un protocollo per dirti il tuo indirizzo/porta pubblica tramite NAT e per determinare eventuali restrizioni nel router che impedirebbe una connessione diretta con un peer. Un server stordente è un meccanismo per i clienti per scoprire la presenza di un NAT, nonché il tipo di NAT e determinare l’indirizzo IP esterno del NAT e la mappatura delle porte.
Lo scopo di una richiesta di stordimento è determinare la tua presenza pubblica in modo che questa presenza pubblica possa quindi essere comunicata con qualcun altro in modo che possano connettersi con te: questa comunicazione viene definita segnalazione, di cui discuteremo più avanti.
Funziona per uno a uno, indirizzo limitato, E Porta limitata Nat. Ma non funziona per Nat simmetrico. Perché quando richiedi il server storico per le tue informazioni pubbliche, quella coppia di comunicazione è stata creata appositamente per il client che fa la richiesta. Non è possibile coinvolgere un altro peer utilizzando NAT simmetrico: la comunicazione sulla porta del dispositivo locale è limitata al server storico.
I server storditi sono leggeri ed economici da mantenere. Ci sono server stordi pubblici che possono essere interrogati gratuitamente.
L’immagine seguente illustra quando lo stornia funziona e quando è possibile stabilire una connessione peer-to-peer.
D’altra parte, se una connessione peer-to-peer non può essere stabilita, ad esempio, quando un peer è dietro un NAT simmetrico-allora la connessione finale al terzo non sarà consentita. Poiché la connessione iniziale è stata stabilita con il server storico e nessun altro peer può utilizzare tali informazioni di connessione.
In un evento come questo in cui non è possibile stabilire una connessione diretta, dobbiamo utilizzare un server a turno.
Attraversamento usando i relè intorno a NAT (svolta)
Il turno è un protocollo per trasmettere traffico di rete quando non è possibile stabilire una connessione diretta tra due pari. Ad esempio, se un peer è dietro un NAT simmetrico, è necessario un server dedicato per trasmettere il traffico tra i peer. In tal caso, creeresti una connessione con un server Tur.
Questo viene fornito con le spese generali e un server a turno può essere costoso da mantenere ed eseguire.
La seguente immagine illustra come viene utilizzato un server di svolta per inoltrare i messaggi tra due o più peer.
Istituzione di connettività interattiva (ICE)
ICE utilizza una combinazione di protocolli stordi e giri per fornire un meccanismo per gli host per scoprire gli indirizzi IP pubblici dell’altro e stabilire una connessione diretta. Se una connessione diretta è impossibile, il ghiaccio utilizzerà il turno per stabilire una connessione di relè tra i due host.
Tutti questi possibili modi per stabilire potenzialmente una connessione sono chiamati candidati al ghiaccio. Tutti gli indirizzi raccolti vengono inviati al peer remoto tramite SDP, che esploreremo dopo. WebRTC utilizza queste informazioni su ciascun client per determinare il modo migliore per connettersi a un altro peer. Può darsi che entrambi i pari siano sullo stesso NAT e che possa essere stabilita una connessione locale, o potrebbe essere che entrambi i coetanei siano dietro NAT simmetrica e richiedano un relè utilizzando un server a turno.
Protocollo di descrizione della sessione (SDP)
SDP è essenzialmente un formato di dati per la descrizione delle sessioni dei media per l’annuncio di sessione, l’invito di sessione e altre forme di iniziazione della sessione. È uno standard per descrivere il contenuto multimediale per la connessione, come risoluzione, formati, codec e crittografia.
È importante sottolineare’s usato anche per descrivere i candidati ICE e altre opzioni di networking. Quando la peer A vuole connettersi al peer B, devono condividere le informazioni SDP per connettersi. Il modo in cui questo SDP è condiviso è interamente fino a: questo viene definito segnalazione e lo esploreremo dopo.
Segnalazione – Stabilire una connessione
La segnalazione è il processo di invio di informazioni di controllo tra due dispositivi per determinare i protocolli di comunicazione, i canali, i codec multimediali e i formati e il metodo di trasferimento dei dati, nonché qualsiasi informazione di routing richieste. La cosa più importante da sapere sul processo di segnalazione per WebRTC: non è definita nella specifica.
Le connessioni peer si occupano di collegamento di due applicazioni su computer diversi. Una connessione viene stabilita attraverso un processo di scoperta e negoziazione chiamato Signaling.
Un avvertimento importante è che WebRTC non ha la segnalazione integrata come parte della specifica, in quanto non è possibile per due dispositivi contattarsi direttamente, che abbiamo esplorato in dettaglio in precedenza. Affinché due pari possano connettersi usando WebRTC, richiedono reciprocamente i dati SDP.
In quanto tale, dipende da te, come sviluppatore, stabilire un modo per due dispositivi di condividere queste informazioni. Un’opzione popolare è WebSocket o le informazioni di segnalazione possono essere inviate avanti e indietro tramite e -mail o consegnate a piedi e inserite manualmente per stabilire una connessione.
Una volta condivise queste informazioni, hai tutto il necessario per due colleghi per stabilire una connessione WebRTC, potrebbe essere una connessione diretta o potrebbe essere tramite un server a turno.
Quando dovresti usare WebRTC?
Puoi anche chiedere: perché dovrei usare WebRTC? Sembra complicato da capire e ancora più complicato da configurare.
È complicato da configurare, ma ci sono molti vantaggi:
- L’API è facile da usare ed è disponibile direttamente nel browser.
- Ha buone prestazioni, consentendo di trasmettere contenuti ad alta larghezza di banda, come video o audio.
- Funzionalità più avanzate, come la condivisione dello schermo e la condivisione dei file possono essere facilmente implementate.
- Supporta una connessione peer-to-peer con latenza ridotta.
- Libero e open source.
- Nessuna segnalazione integrata.
- Devi mantenere i server stordi e girare.
- Per le connessioni di gruppo (come una videochiamata di gruppo) potrebbe essere necessaria una SFU.
- Complicato da impostare e capire.
Quale dovresti scegliere?
Il protocollo che scegli dipenderà dalle tue esigenze specifiche.
Http: Con HTTP/2, ora è possibile avere una comunicazione bidirezionale tra un client e un server. A seconda della tua applicazione, potresti non aver bisogno di una comunicazione duplex completa e qualcosa come SSE sarà più che sufficiente. Abbiamo anche scoperto in questo articolo che WebSockets e GRPC dipendono da HTTP, mentre WebRTC richiede qualche altro canale per la segnalazione. Esso’vale la pena esplorare prima se HTTP risolve le esigenze dell’applicazione prima di approfondire questi altri protocolli.
Websockets sono più adatti per applicazioni in tempo reale che necessitano di comunicazioni a due vie, come le applicazioni di chat. Sono anche relativamente facili da configurare e utilizzare. Tuttavia, i websocket non sono efficienti come GRPC o WEBRTC e non sono adatti per le applicazioni che devono inviare molti dati.
GRPC è un protocollo più efficiente di WebSocket ed è più adatto per le applicazioni che devono inviare molti dati. Tuttavia, GRPC è più complicato da configurare e utilizzare rispetto a WebSockets. Se hai bisogno di effettuare molte piccole chiamate API, GRPC è una buona scelta. Oppure, quando si implementano microservizi con vari linguaggi di programmazione che devono comunicare, quindi GRPC’S Dati strutturati serializzati e generazione di codice ti farà risparmiare molto tempo. Esso’vale anche la pena notare che puoi’t Usa facilmente GRPC dal browser. Per questo, hai bisogno di un proxy dedicato nel tuo backend che traduce le chiamate – vedi GRPC -WEB.
WEBRTC è il protocollo più efficiente per la comunicazione in tempo reale con bassa latenza tra browser e dispositivi ed è adatto per le applicazioni che devono inviare molti dati. WebRTC fornisce anche un’API di facile utilizzo direttamente disponibile nel browser, rendendo facile condividere la fotocamera, l’audio, lo schermo o altri file. Tuttavia, WebRTC può essere complicato da impostare e utilizzare in quanto richiede di eseguire la segnalazione e il mantenimento di una svolta e un server stordente.
Conclusione
Il futuro vedrà più protocolli, cambiamenti e ulteriori miglioramenti. HTTP/3 è già rilasciato e c’è anche un nuovo protocollo di comunicazione chiamato WebTransport, un potenziale sostituto per WebSockets.
Speriamo che tu abbia trovato questo articolo utile e che ti aiuterà a prendere una decisione informata. Se vuoi continuare la discussione, contattaci su Twitter o LinkedIn.
WebRTC vs HLS: confronto tra protocolli di streaming
Questo post sul blog confronta WebRTC e HLS, due dei protocolli di streaming più popolari. Esamina i pro e contro di ciascun protocollo ed esplora le sue applicazioni. Inoltre, il post fornisce una panoramica della quale è meglio per lo streaming, consentendo ai lettori di selezionare la tecnologia giusta per le loro esigenze.
Ashik TS
22 febbraio 2023
Nell’era digitale di oggi, i protocolli di streaming sono diventati essenziali per consumare e condividere i media. Dai flussi live ai video su richiesta, i protocolli di streaming ci hanno permesso di accedere ai contenuti ovunque, in qualsiasi momento. Ma con così tante opzioni disponibili, sapere quale è meglio per le tue esigenze può richiedere tempo e fatica. In questo articolo, esamineremo due dei protocolli di streaming più popolari: WebRTC e HLS, confrontarli e aiutarti a prendere una decisione informata.
Cos’è WebRTC?
WebRTC è un protocollo libero e open source sviluppato dal W3C. Abilita la comunicazione in tempo reale, come chiamate vocali e videochiamate, conferenze online e chat. WebRTC è diventato recentemente importante grazie alla sua capacità di fornire flussi di video e audio a bassa latenza e di alta qualità.
Applicazioni di WebRTC
Ecco alcuni dei casi d’uso più frequentemente impiegati di WebRTC:
- Chiamate vocali e video: Uno dei casi d’uso più popolari per WebRTC è la voce e le videochiamate. Consente una comunicazione in tempo reale a bassa latenza tra due o più persone. Le aziende utilizzano ampiamente questa funzione per la comunicazione interna, la collaborazione e le app rivolte ai consumatori per i social network e gli appuntamenti online.
- Conferenza online: Un altro caso d’uso popolare per WebRTC è la conferenza online. Consente a più utenti di unirsi a una sala riunioni virtuali e di interagire tra loro tramite video e audio, nonché schermi e documenti di condivisione. Le aziende utilizzano ampiamente questa funzione per riunioni e presentazioni remote, nonché da istituzioni educative per lezioni e lezioni online.
- Chiacchierata: WebRTC consente anche una comunicazione basata sul testo in tempo reale tramite chat. Questa funzione può essere integrata in varie app e piattaforme, come i social network, i giochi online e l’assistenza clienti. Consente una comunicazione istantanea e può essere utilizzato per migliorare l’esperienza dell’utente in vari contesti.
Cos’è HLS?
HLS (HTTP Live Streaming) è un protocollo di streaming bitrate adattivo sviluppato da Apple. È ampiamente utilizzato per lo streaming live su dispositivi mobili e browser desktop. HLS è progettato per funzionare con il protocollo HTTP e può essere facilmente integrato nell’infrastruttura a base di HTTP esistente.
Applicazioni di HLS
Ecco alcuni dei modi più comuni in cui HLS viene utilizzato ai giorni nostri:
- Diretta streaming: HLS è ampiamente utilizzato per eventi in streaming dal vivo, come sport, concerti e trasmissioni di notizie. Il protocollo è progettato per gestire il traffico elevato e offrire un’esperienza di streaming regolare per gli spettatori. La funzione Bitrate adattiva consente al flusso di adattarsi alla connessione Internet dello spettatore, fornendo un’esperienza di visualizzazione migliore.
- Video-on-demand (VOD): HLS è anche comunemente usato per il contenuto di video-on-demand (VOD), come film, programmi TV e tutorial video. Il protocollo consente una facile integrazione con i sistemi di gestione dei contenuti e un’esperienza di streaming regolare per lo spettatore con bitrate adattivo.
- IPTV e OTT: HLS è anche utilizzato nei servizi IPTV e Over-the-Top (OTT), come lo streaming di servizi televisivi e video. La capacità del protocollo di gestire il traffico elevato e fornire un’esperienza di streaming regolare lo rende una scelta popolare per queste applicazioni.
- Streaming mobile: HLS è anche popolare per lo streaming mobile in quanto è supportato su piattaforme iOS e Android.
- Comunicazioni aziendali: HLS viene utilizzato in piattaforme di comunicazione aziendale che consentono ai dipendenti di trasmettere in streaming video, condividere schermate e effettuare chiamate audio/video poiché offre un’esperienza di streaming regolare ed è compatibile con la maggior parte dei dispositivi.
WebRTC vs HLS: una confronto dettagliato
Caratteristica | WEBRTC | HLS |
---|---|---|
Supporto browser | Chrome, Firefox, Safari, Edge (con un plugin) | Safari, Chrome, Edge, Firefox (con un plugin) |
Supporto dispositivo | Windows, MacOS, Linux, iOS, Android | iOS, Android, MacOS, Windows |
Supporto codec | VP8, VP9, H.264, h.265 | H.264, h.265 |
Latenza | Basso | Alto |
Sicurezza | Alto | medio |
Qualità video | Alto | Alto |
metodo di consegna | Peer to peer | Basato sul server |
Scalabilità | Alto | Alto |
Compatibilità | Limitato | Largo |
Quando si decide quale protocollo utilizzare, è importante considerare fattori come latenza, sicurezza, qualità video, metodo di consegna, scalabilità e compatibilità.
Latenza
Quando si tratta di latenza, WebRTC ha un chiaro vantaggio rispetto a HLS. WebRTC utilizza una comunicazione in tempo reale, il che significa che il video viene immediatamente consegnato allo spettatore. D’altra parte, HLS utilizza un meccanismo di buffering, che ritarda la consegna video. A seconda delle condizioni di rete, questo ritardo può essere ovunque da pochi secondi a pochi minuti. Questi elementi rendono WebRTC più adatto per casi d’uso che richiedono bassa latenza, come chat video in diretta e giochi online.
Sicurezza
Sia WebRTC che HLS utilizzano la crittografia per proteggere i flussi video. Tuttavia, il livello di sicurezza fornito da ciascun protocollo è diverso. WebRTC utilizza il Protocollo di trasporto in tempo reale (SRTP) sicuro per crittografare il flusso video, che è considerato uno dei metodi di crittografia più sicuri. D’altra parte, HLS utilizza il protocollo HTTP Secure (HTTPS) per crittografare il flusso video. Mentre HTTPS è considerato sicuro, SRTP è meno sicuro. Per questi motivi, WebRTC è più adatto per casi d’uso che richiedono alti livelli di sicurezza, come le transazioni finanziarie e la comunicazione governativa.
Qualità video
Sia WebRTC che HLS sono in grado di fornire video di alta qualità. Tuttavia, la qualità video fornita da ciascun protocollo può variare a seconda delle condizioni di rete. WebRTC utilizza uno streaming bitrate adattivo, che regola la qualità video in tempo reale in base alle condizioni di rete dello spettatore. Ciò significa che la qualità del video sarà elevata anche su reti a bassa banda. D’altra parte, HLS utilizza un meccanismo di consegna video pre-segmentato, che può portare a buffering e balbuzie su reti a bassa larghezza di banda. Di conseguenza, WebRTC è più adatto per casi d’uso che richiedono video di alta qualità su reti a bassa banda.
metodo di consegna
WebRTC e HLS utilizzano diversi metodi di consegna per trasmettere video. WebRTC utilizza un metodo di consegna peer-to-peer (P2P), il che significa che il video viene consegnato direttamente da uno spettatore a un altro. Ciò riduce il carico del server e aumenta la scalabilità del flusso video. D’altra parte, HLS utilizza un metodo di consegna client-server, il che significa che il video viene consegnato dal server allo spettatore. Ciò può portare a problemi di scalabilità, specialmente durante i tempi di punta. Di conseguenza, WebRTC è più adatto per casi d’uso che richiedono elevate scalabilità, come eventi dal vivo e giochi online.
Scalabilità
WebRTC e HLS hanno caratteristiche di scalabilità diverse. WebRTC utilizza un metodo di consegna P2P, che riduce il carico del server e aumenta la scalabilità del flusso video. D’altra parte, HLS utilizza un metodo di consegna client-server, che può portare a problemi di scalabilità, specialmente durante i tempi di punta del traffico. Di conseguenza, WebRTC è più adatto per casi d’uso che richiedono elevate scalabilità, come eventi dal vivo e giochi online.
Compatibilità
WebRTC e HLS hanno caratteristiche di compatibilità diverse. WebRTC è compatibile con la maggior parte dei browser moderni, tra cui Chrome, Firefox e Safari. Tuttavia, non è compatibile con Internet Explorer e Edge. D’altra parte, HLS è compatibile con la maggior parte dei browser moderni, tra cui Chrome, Firefox, Safari, Internet Explorer e Edge. Per questo motivo, HLS è più adatto a casi d’uso che richiedono compatibilità con una vasta gamma di browser e dispositivi.
WebRTC vs HLS: che è meglio?
WEBRTC è un’ottima opzione per applicazioni di streaming in tempo reale a bassa latenza. È perfetto per casi d’uso come chiamate vocali e videochiamate, conferenze online e chat. D’altra parte, HLS è un’opzione eccellente per lo streaming di video live a un vasto pubblico. È particolarmente adatto per casi d’uso come lo streaming di sport dal vivo, concerti e altri eventi che richiedono un’alta scalabilità. La capacità di HLS di adattarsi a diverse condizioni di rete lo rende una scelta popolare per lo streaming dei contenuti agli spettatori su vari dispositivi e reti.
Inoltre, HLS ha un supporto migliore per la protezione del copyright del contenuto, rendendolo una scelta preferita per lo streaming di contenuti premium. Quando si tratta di compatibilità, HLS ha un leggero vantaggio su WebRTC. HLS è ampiamente supportato, rendendolo un’opzione più versatile per lo streaming di contenuti per un pubblico più ampio. Tuttavia, questo ha il costo di latenza leggermente più alta.
Se il tuo obiettivo principale è lo streaming in tempo reale, a bassa latenza, WebRTC potrebbe essere la tua opzione migliore. Altrimenti, se il tuo obiettivo principale è sulla scalabilità e sulla compatibilità, allora HLS potrebbe essere la scelta migliore.
Conclusione
In conclusione, sia WebRTC che HLS hanno le proprie caratteristiche uniche e casi d’uso che le rendono adatti a diversi tipi di streaming. WebRTC è più adatto per la bassa latenza, comunicazioni in tempo reale come chiamate vocali e video, conferenze online e chat. D’altra parte, HLS è più adatto per lo streaming di alta qualità di video preregistrati su una vasta gamma di dispositivi.
FAQ
1. WebRTC usa TCP o UDP?
WebRTC utilizza sia TCP che UDP a seconda del tipo di dati trasmessi. Utilizza TCP per controllare i messaggi e UDP per lo streaming multimediale.
2. YouTube usa HLS?
Sì, YouTube utilizza HLS (HTTP Live Streaming) come uno dei suoi protocolli di streaming per fornire video agli spettatori.
3. WebRTC è solo per i browser?
WebRTC è principalmente una tecnologia basata sul browser, ma può essere utilizzato anche nelle app native attraverso le librerie WebRTC.
4. Netflix usa WebRTC?
No, Netflix non usa WebRTC per lo streaming. Usano la loro tecnologia proprietaria chiamata Streaming adattivo su HTTP (ASOH) basato su HTTP Live Streaming (HLS).