WebRTC vs Websocket: se WebRTC è in grado di eseguire video, audio e dati, perché ho bisogno di Websocket? [chiuso]


220

Quindi sto cercando di creare un'app di chat che consenta video, audio e testo. Ho trascorso un po 'di tempo a ricercare Websocket e WebRTC per decidere quale utilizzare. Dal momento che ci sono molte app audio e video con WebRTC, questa sembra una scelta ragionevole, ma ci sono altre cose che dovrei considerare? Sentiti libero di condividere i tuoi pensieri.

Cose come:

  • Essendo nuovo WebRTC è disponibile solo su alcuni browser, mentre WebSocket sembra essere presente in più browser.

  • Scalabilità: Websocket utilizza un server per la sessione e WebRTC sembra essere p2p.

  • Multiplex / chat room multiple: utilizzate negli Hangout di Google+ e sto ancora visualizzando le app demo su come implementarle.

  • Server: i websocket richiedono RedisSessionStore o RabbitMQ per scalare su più macchine.

Risposte:


272

WebRTC è progettato per comunicazioni ad alte prestazioni e di alta qualità di dati video, audio e arbitrari. In altre parole, per app esattamente come quelle che descrivi.

Le app WebRTC necessitano di un servizio tramite il quale scambiare metadati di rete e multimediali, un processo noto come segnalazione. Tuttavia, una volta effettuata la segnalazione, i video / audio / dati vengono trasmessi direttamente tra i client, evitando il costo delle prestazioni dello streaming tramite un server intermedio.

WebSocket invece è progettato per la comunicazione bidirezionale tra client e server. È possibile eseguire lo streaming di audio e video su WebSocket (vedere qui per esempio), ma la tecnologia e le API non sono intrinsecamente progettate per uno streaming efficiente e robusto come WebRTC.

Come altre risposte hanno detto, WebSocket può essere utilizzato per la segnalazione.

Mantengo un elenco di risorse WebRTC : consiglio vivamente di iniziare guardando la presentazione I / O di Google del 2013 su WebRTC.


2
Grazie per la risposta dettagliata ... qualche aggiornamento circa due anni dopo?
Crashalot,

2
Consiglio di dare un'occhiata alle risorse collegate sopra - vedi g.co/webrtc .
Sam Dutton,

3
Inoltre, non credo che (credo) WebRTC possa essere configurato in modo da essere meno rigoroso riguardo all'ordine dei pacchetti e cose, quindi può essere molto più veloce se non ti dispiace per la perdita di pacchetti ecc. (Cioè avere i dati più recenti è più importante che avere tutti i dati): stackoverflow.com/a/13051771/993683

1
Penso che le parole chiave qui siano al momento . La funzione di fallback di polling di Socket.io è ora ridondante, quindi ti rimane una libreria sottile come wafer che ha funzionalità facili da implementare ad un costo orribile delle prestazioni. Non iniziare: D.
Luca,

1
@SamDutton, Sicuramente il server può raddoppiare come peer e utilizzare un'estremità di RTCDataChannel stesso? Come tale per la moderna programmazione web non vedo alcun vantaggio del websocket? poiché RTCDataChannel è UDP / tempo reale?
Pacerier

71

WebSockets:

  • Standard IETF ratificato (6455) con supporto per tutti i browser moderni e persino per i browser legacy che utilizzano il polyfill web-socket-js.

  • Utilizza l'handshake compatibile HTTP e le porte predefinite che ne semplificano l'utilizzo con l'infrastruttura firewall, proxy e web server esistente.

  • API del browser molto più semplice. Fondamentalmente un costruttore con un paio di callback.

  • Solo da client / browser a server.

  • Supporta solo il trasporto affidabile, in ordine perché è basato su TCP. Questo significa che i drop dei pacchetti possono ritardare tutti i pacchetti successivi.

WebRTC:

  • Ho appena iniziato a essere supportato da Chrome e Firefox. MS ha proposto una variante incompatibile. Il componente DataChannel non è ancora compatibile tra Firefox e Chrome.

  • WebRTC è browser per browser in circostanze ideali ma anche in questo caso richiede quasi sempre un server di segnalazione per configurare le connessioni. Le soluzioni server di segnalazione più comuni in questo momento utilizzano WebSocket.

  • Il livello di trasporto è configurabile con un'applicazione in grado di scegliere se la connessione è in ordine e / o affidabile.

  • API browser complesse e multistrato. Esistono librerie JS per fornire un'API più semplice, ma sono giovani e in rapida evoluzione (proprio come WebRTC stesso).


4
Il supporto del browser WebRTC è molto meglio ormai. caniuse.com/#search=WebRTC
tuxayo

57

I websocket utilizzano il protocollo TCP.

WebRTC è principalmente UDP.

Pertanto, la ragione principale dell'utilizzo di WebRTC invece di Websocket è la latenza. Con lo streaming di websocket avrai una latenza elevata o una riproduzione discontinua con bassa latenza. Con WebRTC è possibile ottenere una riproduzione a bassa latenza e fluida, elemento cruciale per le comunicazioni VoIP.

Prova a testare questa tecnologia con una perdita di rete, ovvero il 2%. Vedrai ritardi elevati nel flusso Websocket.


2
Per chi fosse interessato, questa roba è spiegato ulteriormente qui: stackoverflow.com/a/13051771/993683

39

webRTC o websocket? Perché non usare entrambi.

Quando si crea una chat video / audio / di testo, webRTC è sicuramente una buona scelta poiché utilizza la tecnologia peer to peer e una volta che la connessione è attiva e funzionante, non è necessario passare la comunicazione tramite un server (a meno che non si usi TURN).

Quando si configura la comunicazione webRTC, è necessario coinvolgere una sorta di meccanismo di segnalazione. I websocket potrebbero essere una buona scelta qui, ma webRTC è la strada da percorrere per le informazioni video / audio / di testo. Le chat room sono realizzate nella segnalazione.

Ma, come hai detto, non tutti i browser supportano webRTC, quindi i websocket possono a volte essere un buon fallback per quei browser.


10

Il confronto tra websocket e webrtc non è giusto.

Websocket si basa su TCP. Il limite del pacchetto può essere rilevato dalle informazioni di intestazione di un pacchetto websocket a differenza di tcp.

In genere, webrtc utilizza websocket. La segnalazione per webrtc non è definita, dipende dal fornitore di servizi che tipo di segnalazione vuole usare. Può essere SIP, HTTP, JSON o qualsiasi messaggio di testo / binario.

I messaggi di segnalazione possono essere inviati / ricevuti tramite websocket.


10

La sicurezza è un aspetto che ti sei perso.

Con Websocket i dati devono passare attraverso un server web centrale che in genere vede tutto il traffico e può accedervi.

Con WebRTC i dati sono crittografati end-to-end e non passano attraverso un server (tranne che a volte sono necessari server TURN, ma non hanno accesso al corpo dei messaggi che inoltrano).

A seconda dell'applicazione, questo può o meno avere importanza.

Se si inviano grandi quantità di dati, vale la pena considerare anche il risparmio sui costi della larghezza di banda del cloud dovuto all'architettura P2P di webRTC.


1
È un'idea sbagliata che WebRTC sia rigorosamente un protocollo peer-to-peer. Sta iniziando a vedere un uso diffuso nell'industria come un'alternativa VOIP basata su server.
photicSphere

Inoltre, quando implementiamo WebSocket come flusso multimediale di WebRTC, utilizza SIP e SIP è un protocollo di testo semplice che è stato utilizzato per VoIP.
M. Rostami, il

6

Webrtc fa parte della connessione peer to peer. Sappiamo tutti che prima di creare una connessione peer to peer, è necessario un processo di handshaking per stabilire una connessione peer to peer. E i websocket svolgono il ruolo del processo di handshaking.


3

Websocket e WebRTC possono essere utilizzati insieme, Websocket come canale di segnale di WebRTC e webrtc è un canale video / audio / di testo, inoltre WebRTC può essere in UDP anche in relè TURN, supporto di relè TURN TCP HTTP e HTTPS. Molti progetti utilizzano Websocket e WebRTC insieme.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.