WebRTC ve Websockets karşılaştırması: WebRTC Video, Ses ve Veri yapabiliyorsa, neden Websockets uygulamasına ihtiyacım var? [kapalı]


221

Bu yüzden video, ses ve metne izin verecek bir sohbet uygulaması oluşturmak istiyorum. Hangisinin kullanılacağına karar vermek için Websockets ve WebRTC'yi araştırmak için biraz zaman harcadım. WebRTC ile çok sayıda video ve ses uygulaması olduğu için, bu makul bir seçim gibi görünüyor, ancak dikkate almam gereken başka şeyler var mı? Düşüncelerinizi paylaşmaktan çekinmeyin.

Gibi şeyler:

  • Yeni WebRTC olması nedeniyle yalnızca bazı tarayıcılarda kullanılabilirken, WebSockets daha fazla tarayıcıda gibi görünmektedir.

  • Ölçeklenebilirlik - Websockets oturum için bir sunucu kullanır ve WebRTC p2p gibi görünür.

  • Çoklama / çoklu sohbet odaları - Google+ Hangouts'ta kullanılır ve hâlâ nasıl uygulanacağına ilişkin demo uygulamaları görüyorum.

  • Sunucu - Websockets, birden çok makinede ölçeklendirmek için RedisSessionStore veya RabbitMQ'ya ihtiyaç duyar.

Yanıtlar:


273

WebRTC, video, ses ve keyfi verilerin yüksek performanslı, yüksek kaliteli iletişimi için tasarlanmıştır. Başka bir deyişle, tam olarak tarif ettiğiniz gibi.

WebRTC uygulamaları, sinyalleşme olarak bilinen bir süreç olan ağ ve medya meta verilerini değiş tokuş edebilecekleri bir hizmete ihtiyaç duyar. Bununla birlikte, sinyalizasyon gerçekleştiğinde, video / ses / veri doğrudan istemciler arasında aktarılır ve aracı bir sunucu üzerinden akış performans maliyetinden kaçınır.

WebSocket ise istemci ile sunucu arasında çift yönlü iletişim için tasarlanmıştır. WebSocket üzerinden ses ve video akışı yapmak mümkündür ( örneğin buraya bakın ), ancak teknoloji ve API'ler, WebRTC'nin olduğu gibi verimli ve sağlam akış için doğal olarak tasarlanmamıştır.

Diğer yanıtların söylediği gibi, WebSocket sinyalizasyon için kullanılabilir.

WebRTC kaynaklarının bir listesini tutuyorum : WebRTC ile ilgili 2013 Google I / O sunumuna bakarak başlamanızı kesinlikle öneririz .


2
Ayrıntılı cevap için teşekkürler ... neredeyse iki yıl sonra herhangi bir güncelleme?
Crashalot

2
Yukarıda bağlantılı kaynaklara göz atmanızı öneririm - bkz. G.co/webrtc .
Sam Dutton

3
Ayrıca WebRTC çok daha hızlı vs (yani sahip bazı paket kaybı sakıncası olduğunu olabilirsiniz, paket düzeni ve malzeme konusunda daha az katı olmak üzere yapılandırılabilir değil (sanırım) o en yeni veri olan daha önemli olduğu tüm veri): stackoverflow.com/a/13051771/993683

1
Sanırım buradaki anahtar kelimeler o sırada . Socket.io'nun yoklama geri dönüş özelliği artık gereksizdir, bu nedenle korkunç bir performans maliyetiyle uygulanması kolay özelliklere sahip gofret ince bir kütüphaneye bırakılırsınız. Beni çalıştırma: D.
Luke

1
@SamDutton, Şüphesiz sunucu eş olarak ikiye katlanabilir ve RTCDataChannel'in bir ucunu kullanabilir mi? Modern web programlama için websocket'in hiç bir avantajı yok mu? RTCDataChannel UDP / gerçek zamanlı olduğundan beri?
Pacerier

71

WebSockets:

  • Tüm modern tarayıcılarda ve hatta web-socket-js çoklu dolgusu kullanan eski tarayıcılarda desteklenmiş onaylanmış IETF standardı (6455).

  • HTTP uyumlu el sıkışma ve varsayılan bağlantı noktalarını kullanır ve mevcut güvenlik duvarı, proxy ve web sunucusu altyapısı ile kullanımı çok daha kolay hale getirir.

  • Çok daha basit tarayıcı API'sı. Temelde birkaç geri arama ile bir kurucu.

  • İstemci / tarayıcıdan yalnızca sunucuya.

  • TCP üzerinde oluşturulduğu için yalnızca güvenilir, sıralı aktarımı destekler. Bu, paket damlalarının sonraki tüm paketleri geciktirebileceği anlamına gelir.

WebRTC:

  • Chrome ve Firefox tarafından desteklenmeye başlıyor. MS, uyumsuz bir varyant önerdi. DataChannel bileşeni, Firefox ve Chrome arasında henüz uyumlu değil.

  • WebRTC ideal koşullarda tarayıcıya tarayıcıdır, ancak o zaman bile neredeyse her zaman bağlantıları kurmak için bir sinyal sunucusu gerektirir. En yaygın sinyal sunucusu çözümleri şu anda WebSockets kullanıyor.

  • Aktarım katmanı, bağlantının düzgün ve / veya güvenilir olup olmadığını seçebilen uygulama ile yapılandırılabilir.

  • Karmaşık ve çok katmanlı tarayıcı API'sı. Daha basit bir API sağlamak için JS kütüphaneleri var, ancak bunlar genç ve hızla değişiyor (tıpkı WebRTC'nin kendisi gibi).


4
WebRTC tarayıcı desteği şu ana kadar çok daha iyi. caniuse.com/#search=WebRTC
tuxayo

59

Web soketleri TCP protokolü kullanır.

WebRTC çoğunlukla UDP'dir.

Bu nedenle, Websocket yerine WebRTC kullanmanın ana nedeni gecikmedir. Websocket akışı ile yüksek gecikme süresine veya düşük gecikme süresiyle dalgalı oynatmaya sahip olacaksınız. WebRTC ile VoIP iletişimleri için çok önemli olan düşük gecikmeli ve sorunsuz oynatım elde edebilirsiniz.

Bu teknolojiyi bir ağ kaybı, yani% 2 ile test etmeye çalışın. Web Soketi akışında yüksek gecikmeler göreceksiniz.


2
İlgilenenler için, bu konu daha fazla açıklanmıştır: stackoverflow.com/a/13051771/993683

39

webRTC veya web soketleri? Neden her ikisini de kullanmıyorsunuz?

Bir video / sesli / metin sohbeti oluştururken, webRTC eşler arası teknolojiyi kullandığından ve bağlantı kurulduktan ve iletişimi bir sunucu üzerinden geçirmenize gerek yoktur (TURN kullanmadıkça).

WebRTC iletişimini kurarken bir tür sinyal mekanizmasını dahil etmeniz gerekir. Web soketleri burada iyi bir seçim olabilir, ancak webRTC video / ses / metin bilgisi için bir yoldur. Sohbet odaları sinyalizasyonda gerçekleştirilir.

Ancak, belirttiğiniz gibi, her tarayıcı webRTC'yi desteklemediğinden, websockets bazen bu tarayıcılar için iyi bir geri dönüş olabilir.


11

Güvenlik, kaçırdığınız bir özelliktir.

Websockets ile veriler genellikle tüm trafiği gören ve erişebilen merkezi bir web sunucusu üzerinden gitmek zorundadır.

WebRTC ile veriler uçtan uca şifrelenir ve bir sunucudan geçmez (bazen TURN sunucuları gerekir, ancak ilettikleri iletilerin gövdesine erişimi yoktur).

Başvurunuza bağlı olarak bu önemli olabilir veya olmayabilir.

Büyük miktarda veri gönderiyorsanız, webRTC'nin P2P mimarisi nedeniyle bulut bant genişliği maliyetlerindeki tasarruf da dikkate alınmaya değer olabilir.


1
WebRTC'nin kesinlikle eşler arası bir protokol olduğu yanılgısıdır. Endüstride yaygın bir kullanımı sunucu tabanlı bir VOIP alternatifi olarak görmeye başlıyor.
photicSphere

Ayrıca, WebSocket'i bir WebRTC medya akışı olarak uyguladığımızda, SIP kullanır ve SIP, VoIP için kullanılan düz bir metin protokolüdür.
M. Rostami

10

Websocket ve webrtc karşılaştırması haksızdır.

Websocket TCP'nin üstüne dayanır. Paketin sınırı, tcp'den farklı olarak bir websocket paketinin başlık bilgisinden tespit edilebilir.

Tipik olarak webrtc websocket kullanır. Webrtc için sinyal tanımlanmamıştır, ne tür bir sinyal kullanmak istediği servis sağlayıcıya aittir. SIP, HTTP, JSON veya herhangi bir metin / ikili mesaj olabilir.

Sinyal mesajları web soketi kullanılarak gönderilebilir / alınabilir.


6

Webrtc eşler arası bağlantının bir parçasıdır. Eşler arası bağlantı oluşturmadan önce eşler arası bağlantı kurmak için el sıkışma süreci gerektiğini biliyoruz. Ve websockets el sıkışma sürecinin rolünü oynar.


3

Websocket ve WebRTC birlikte kullanılabilir, WebsoTC, WebRTC'nin bir sinyal kanalı olarak ve webrtc bir video / ses / metin kanalıdır, ayrıca WebRTC, TURN rölesinde de UDP'de olabilir, TURN röle desteği TCP HTTP de HTTPS. Birçok proje Websocket ve WebRTC'yi birlikte kullanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.