Webrtc HTTP kullanıyor mu?
Webrtc HTTP kullanıyor mu
Web geliştikçe her istek için yeni bir TCP bağlantısı açmak bir sorun haline geldi. Basit web sayfaları yerine tam uygulamalar oluşturmaya başladık ve almak için gereken bir tarayıcının sayısı daha fazla oldu. HTML, CSS ve JavaScript dosyasının yanı sıra çeşitli resimler ve diğer varlıklar gerektiren tipik bir web uygulaması hayal edin. Her dosya için yeni bir bağlantı yapılması gerekiyordu.
WebRTC vs HTTP akışı
Возожно, пй я являюapor п г değerlendirme ектронной пчты е uğrade част’s.
-Tartışma
Birkaç gündür canlı video akışı için WebRTC ve HTTP akış protokollerini (HLS, MPEG-DASH) deniyorum ve WebRTC’nin alt ikinci gecikmeleri elde ederken, HTTP akış protokollerinin her zaman çok heceli gecikmeleri var. Bu nedenle WebRTC ve HTTP akışı ile ilgili birkaç sorum var.
1. WebRTC, HTTP akış protokollerine kıyasla alt ikinci gecikmelere nasıl ulaşabilir?
WebRTC, gerçek zamanlı iletişim (RTC) yetenekleri nedeniyle HTTP akış protokollerine kıyasla alt ikinci gecikmeler elde edebilir. WebRTC, uygulamalara akranlar arasındaki video, ses ve diğer verilerin anında iletimi sağlamak için oluşturulmuştur. Bu, neredeyse anlık bir içeriğin iletilmesine izin verir, bu da ikinci gecikmelerle sonuçlanır.
2. WebRTC zaten düşük gecikmeli video akışı sağlıyorsa, neden MPEG-Dash Standardı altında HTTP akış protokollerini birleştirme çabası var?
HTTP akış protokollerini MPEG-Dash standardı altında birleştirme çabası, HTTP tabanlı akışa standart bir yaklaşım ihtiyacından kaynaklanmaktadır. WebRTC düşük gecikmeli video akışı sağlarken, tüm kullanım durumları için uygun değildir ve tüm cihazlarla ve yazılımlarla uyumlu olmayabilir. HTTP akış protokollerini MPEG-Dash standardı altında birleştirerek, içerik sağlayıcılarının farklı platformlarda ve cihazlarda yüksek kaliteli video akışı sunmaları daha kolay hale gelir ve kullanıcılar için tutarlı bir görüntüleme deneyimi sağlar.
3. Webrtc RTMP ile nasıl karşılaştırılır?? (Şimdiye kadar RTMP’yi araştırmadım, ancak RTMP ile ikinci alt gecikmeler elde etmenin mümkün olup olmadığını bilmek istiyorum)
WebRTC ve RTMP, medya akışında kullanılan protokollerdir, ancak gecikme ve uyumluluk açısından bazı farklılıkları vardır. WebRTC gerçek zamanlı iletişim için tasarlanmıştır ve ikinci alt gecikmeleri elde edebilir, bu da anında iletim gerektiren uygulamalar için uygun hale getirir. Öte yandan, RTMP (gerçek zamanlı mesajlaşma protokolü) öncelikle bir kodlayıcı ile akış sunucusu arasındaki ses, video ve verileri akış için kullanılan bir protokoldür. RTMP düşük gecikmeli akış sağlayabilirken, ikinci alt gecikmelere ulaşmak, ağ koşulları ve sunucu yapılandırmaları gibi çeşitli faktörlere bağlı olabilir.
WebRTC ve HTTP tabanlı akış arasında karşılaştırmalı bir çalışma
Uzun zamandır, akış gecikmesini azaltmak popüler bir konu olmuştur. Geçmişte HTTP tabanlı akışla on saniye ve hatta bir dakikalık gecikmeler olduğu bilinmektedir. Tek haneli saniyelerde geleneksel yayın gecikmesi ve gibi ortaya çıkan çözümlerle WebRTC Geliştirme Hizmetleri, Soru, hangi yaklaşımı alacağınızdır. WebRTC akışı, yalnızca saniyede değil, aynı zamanda 500 milisaniyeden daha az bir süre içinde video sunabilir. Şu anda mevcut olan en düşük gecikmeli akış teknolojisidir ve neredeyse anlık bir iletim sağlayan.
Bu şık kılavuzda, WebRTC’nin nasıl çalıştığına bakacağız ve bir perspektifinden HTTP ile karşılaştıracağız Video akışı hizmeti. Başlayalım!
HTTP tabanlı akış ve WebRTC’nin hızlı bir şekilde yıkımı
HTTP tabanlı protokoller, ilerici indirmeler gönderen teknik olarak düzenli web sunucularıdır. Bağlantı, yazılım veya cihazdan bağımsız olarak mümkün olan en yüksek video kalitesini ve görüntüleme deneyimini sağlamak için uyarlanabilir bit hızı akışı kullanıyorlar. Mevcut en yaygın HTTP tabanlı protokollerden bazıları MPEG-Dash, Apple’S HLS, Adobe HDS ve Microsoft Düzgün Akış.
WebRTC, mükemmel araçlar ve yaygın endüstri desteği ile desteklenen sağlam bir protokoldür. Uygulamalara gerçek zamanlı iletişim (RTC) özellikleri sağlamak için oluşturuldu, video, ses veya diğer herhangi bir tür veri türünün akranları arasında aktarılmasına izin verildi. Bu, ikisi arasında, istemci-sunucu odaklı HTTP tabanlı akışla karşılaştırıldığında önemli bir ayrımdır.
UDP VS. TCP
İnternet Protokolü Süitinin Temel Bileşenleri, Kullanıcı Datagram Protokolü (UDP) ve Şanzıman Kontrol Protokolü (TCP), her ikisi de taşıma katmanında bulunur.
UDP ve TCP arasındaki ana ayrım, TCP’nin verileri iletirken üç yönlü bir el sıkışma gerektirmesidir. Başlatıcı (istemci), alıcının (sunucu) bir bağlantı kurmasını ister, alıcı cevaplar ve başlatıcı yanıtı kabul eder ve iki uç arasında bir oturum sürdürür. Bu nedenle, TCP son derece güvenilirdir ve paket kaybı ve sipariş ile başa çıkabilir.
Öte yandan UDP’başlamak için bir el sıkışma gerektirir. Bant genişliği kısıtlamalarından bağımsız olarak verileri aktarır, bu da onu daha hızlı ve riskli hale getirir. UDP, yeniden iletimleri, paket sıralamasını veya hata kontrolünü desteklemediğinden, bir ağ hıçkırışı, verileri transit olarak kirletme potansiyeline sahiptir.
WebRTC gibi protokoller genellikle UDP kullanırken, HTTP tabanlı protokoller TCP kullanır.
Webrtc, HTTP tabanlı akışa karşı nasıl birikir??
- Ne tür bir gecikme arıyorsun?
- İzleyicinin büyüklüğü ne olacak?
- Harcamak istediğiniz maksimum miktar nedir?
Gecikme
Gecikme sorularının cevapları, hedeflediğiniz gecikme aralığına bağlıdır.
LL-HLS ve LL-DASH gibi yeni ve gelişmiş HL’lerin 3 saniye veya daha az gecikmesi vardır. Bu hala hızlı kabul edilir ve düşük gecikmeli kullanım durumlarının çoğunluğu için yeterli olacaktır. Öte yandan WebRTC, kullanım durumunuz gerçek zamanlı akış gerektiriyorsa en hızlı çözüm olmaya devam ediyor. Modern internete tam olarak uyum sağlamak için geliştirilen bir UDP protokolü olduğu için. 500 ms gerçek zamanlı gecikmeyi destekler.
WebRTC, iki yönlü, gerçek zamanlı iletişim sağlamak için tasarlanmıştır. TCP’ye dayanan HLS’den farklı olarak, WebRTC UDP’ye dayanmaktadır. Bu, WebRTC’nin istemci ve sunucu olmadan başlayabileceği anlamına gelir. Sonuç olarak, WebRTC daha hızlıdır, ancak aynı zamanda ağ dalgalanmalarına daha duyarlı hale getirir.
WebRTC, çözümünüz eşler arası, gerçek zamanlı akış gerektiriyorsa, kullanılması gereken protokoldür. Ancak, kitlenizi 50 kişinin üzerinde büyütmeniz gerekiyorsa, stratejinizi yeniden gözden geçirmeniz gerekir.
HLS ile karşılaştırıldığında, WebRTC’yi ölçeklendirme çok daha zordur. Ancak, bu hibrit bir iş akışı ile çözülebilir. Seçiminiz, kullanım durumunuz ve hedef kitle boyutunuza göre belirlenecektir.
Büyük kitlelere ulaşma söz konusu olduğunda, HTTP tabanlı protokoller zirveye çıkıyor.
Webrtc HTTP kullanıyor mu
Web geliştikçe her istek için yeni bir TCP bağlantısı açmak bir sorun haline geldi. Basit web sayfaları yerine tam uygulamalar oluşturmaya başladık ve almak için gereken bir tarayıcının sayısı daha fazla oldu. HTML, CSS ve JavaScript dosyasının yanı sıra çeşitli resimler ve diğer varlıklar gerektiren tipik bir web uygulaması hayal edin. Her dosya için yeni bir bağlantı yapılması gerekiyordu.
WebRTC vs HTTP akışı
Возожно, пй я являюapor п г değerlendirme ектронной пчты е uğrade част’s.
-Tartışma
Birkaç gündür canlı video akışı için WebRTC ve HTTP akış protokollerini (HLS, MPEG-DASH) deniyorum ve WebRTC’nin alt ikinci gecikmeleri elde ederken, HTTP akış protokollerinin her zaman çok heceli gecikmeleri var. Bu nedenle WebRTC ve HTTP akışı ile ilgili birkaç sorum var.
1. WebRTC, HTTP akış protokollerine kıyasla alt ikinci gecikmelere nasıl ulaşabilir?
2. WebRTC zaten düşük gecikmeli video akışı sağlıyorsa, neden MPEG-Dash Standardı altında HTTP akış protokollerini birleştirme çabası var?
3. Webrtc RTMP ile nasıl karşılaştırılır?? (Şimdiye kadar RTMP’yi araştırmadım, ancak RTMP ile ikinci alt gecikmeler elde etmenin mümkün olup olmadığını bilmek istiyorum)
WebRTC ve HTTP tabanlı akış arasında karşılaştırmalı bir çalışma
Uzun zamandır, akış gecikmesini azaltmak popüler bir konu olmuştur. Geçmişte HTTP tabanlı akışla on saniye ve hatta bir dakikalık gecikmeler olduğu bilinmektedir. Tek haneli saniyelerde geleneksel yayın gecikmesi ve gibi ortaya çıkan çözümlerle WebRTC Geliştirme Hizmetleri , Soru, hangi yaklaşımı alacağınızdır. WebRTC akışı, yalnızca saniyede değil, aynı zamanda 500 milisaniyeden daha az bir süre içinde video sunabilir. Şu anda mevcut olan en düşük gecikmeli akış teknolojisidir ve neredeyse anlık bir iletim sağlayan.
Bu şık kılavuzda, WebRTC’nin nasıl çalıştığına bakacağız ve bir perspektifinden HTTP ile karşılaştıracağız Video akışı hizmeti . Başlayalım!
HTTP tabanlı akış ve WebRTC’nin hızlı bir şekilde yıkımı
HTTP tabanlı protokoller, ilerici indirmeler gönderen teknik olarak düzenli web sunucularıdır. Bağlantı, yazılım veya cihazdan bağımsız olarak mümkün olan en yüksek video kalitesini ve görüntüleme deneyimini sağlamak için uyarlanabilir bit hızı akışı kullanıyorlar. Mevcut en yaygın HTTP tabanlı protokollerden bazıları MPEG-Dash, Apple’S HLS, Adobe HDS ve Microsoft Düzgün Akış.
WebRTC, mükemmel araçlar ve yaygın endüstri desteği ile desteklenen sağlam bir protokoldür. Uygulamalara gerçek zamanlı iletişim (RTC) özellikleri sağlamak için oluşturuldu, video, ses veya diğer herhangi bir tür veri türünün akranları arasında aktarılmasına izin verildi. Bu, ikisi arasında, istemci-sunucu odaklı HTTP tabanlı akışla karşılaştırıldığında önemli bir ayrımdır.
UDP VS. TCP
İnternet Protokolü Süitinin Temel Bileşenleri, Kullanıcı Datagram Protokolü (UDP) ve Şanzıman Kontrol Protokolü (TCP), her ikisi de taşıma katmanında bulunur.
UDP ve TCP arasındaki ana ayrım, TCP’nin verileri iletirken üç yönlü bir el sıkışma gerektirmesidir. Başlatıcı (istemci), alıcının (sunucu) bir bağlantı kurmasını ister, alıcı cevaplar ve başlatıcı yanıtı kabul eder ve iki uç arasında bir oturum sürdürür. Bu nedenle, TCP son derece güvenilirdir ve paket kaybı ve sipariş ile başa çıkabilir.
Öte yandan UDP’başlamak için bir el sıkışma gerektirir. Bant genişliği kısıtlamalarından bağımsız olarak verileri aktarır, bu da onu daha hızlı ve riskli hale getirir. UDP, yeniden iletimleri, paket sıralamasını veya hata kontrolünü desteklemediğinden, bir ağ hıçkırışı, verileri transit olarak kirletme potansiyeline sahiptir.
WebRTC gibi protokoller genellikle UDP kullanırken, HTTP tabanlı protokoller TCP kullanır.
Webrtc, HTTP tabanlı akışa karşı nasıl birikir??
- Ne tür bir gecikme arıyorsun?
- İzleyicinin büyüklüğü ne olacak?
- Harcamak istediğiniz maksimum miktar nedir?
Gecikme
Gecikme sorularının cevapları, hedeflediğiniz gecikme aralığına bağlıdır.
LL-HLS ve LL-DASH gibi yeni ve gelişmiş HL’lerin 3 saniye veya daha az gecikmesi vardır. Bu hala hızlı kabul edilir ve düşük gecikmeli kullanım durumlarının çoğunluğu için yeterli olacaktır. Öte yandan WebRTC, kullanım durumunuz gerçek zamanlı akış gerektiriyorsa en hızlı çözüm olmaya devam ediyor. Modern internete tam olarak uyum sağlamak için geliştirilen bir UDP protokolü olduğu için. 500 ms gerçek zamanlı gecikmeyi destekler.
WebRTC, iki yönlü, gerçek zamanlı iletişim sağlamak için tasarlanmıştır. TCP’ye dayanan HLS’den farklı olarak, WebRTC UDP’ye dayanmaktadır. Bu, WebRTC’nin istemci ve sunucu olmadan başlayabileceği anlamına gelir. Sonuç olarak, WebRTC daha hızlıdır, ancak aynı zamanda ağ dalgalanmalarına daha duyarlı hale getirir.
WebRTC, çözümünüz eşler arası, gerçek zamanlı akış gerektiriyorsa, kullanılması gereken protokoldür. Ancak, kitlenizi 50 kişinin üzerinde büyütmeniz gerekiyorsa, stratejinizi yeniden gözden geçirmeniz gerekir.
HLS ile karşılaştırıldığında, WebRTC’yi ölçeklendirme çok daha zordur. Ancak, bu hibrit bir iş akışı ile çözülebilir. Seçiminiz, kullanım durumunuz ve hedef kitle boyutunuza göre belirlenecektir.
Büyük kitlelere ulaşma söz konusu olduğunda, HTTP tabanlı protokoller zirveye çıkıyor. Sırasında “CDN’ler” WebRTC var, maliyet genellikle yasaklayıcıdır.
Maliyet
WebRTC ücretsiz ve açık kaynaklı bir protokol. Ama WebRTC ölçeklendirme hakkında nasıl konuştuğumuzu hatırla? Tamamen mümkündür ve birçok kullanım durumunda etkili bir şekilde çalışır – ancak ucuz değil. Yüzlerce kişiye akışa gerek yoksa, WebRTC harika bir seçenektir. Ancak, geniş bir kitleye ulaşmak istiyorsanız, tarayıcı üzerindeki yükü azaltmak için ek sunuculara para harcamanız gerekecek.
HLS belki de en uygun maliyetli video dağıtım yöntemidir. Bir CDN ile ölçeklendirme, uygun fiyatlı HTTP altyapıları ve mevcut TCP tabanlı ağ teknolojisi kullandığı için maliyet açısından kolayca haklıdır.
Çözüm
Son birkaç yılda, HTTP tabanlı protokol ve WebRTC uzun bir yol kat etti. Gerçeğine rağmen, her ikisi de endüstriyi ileriye taşıyan en yeni teknolojilerdir, her birinin kendi avantajları ve dezavantajları vardır. Hiçbir seçim herkes için ideal değildir, ancak bunlardan biri sizin için en uygun olabilir.
Sonunda, optimal protokol projenizin özellikleri, dağıtılacağı cihazlar ve kitlenizin ölçeği ile belirlenecektir. Düşük gecikmeli bir çözüm geliştirirken, bunları aklınızda bulundurun.
Sizin için en iyi çözümü bulmayı merak ediyorum? Canlı video akışı uzmanlarımızla iletişime geçin!
HTTP, WebSocket, GRPC veya WebRTC: Uygulamanız için hangi iletişim protokolü en iyisidir?
30 günlük ücretsiz denemenizi bugün etkinleştirin ve prototiplemeye başlayın.
- Görüntülü Sohbet Oluşturun
- SFU nedir
- Video akışı protokolleri
- P2P Video Konferansı
Makaleyi şu adrese paylaşın:
Uygulamalarınız için bir iletişim protokolü seçerken, birçok farklı seçenek vardır. Bu yazıda biz’Dört popüler çözüme bir göz atın: HTTP, WebSocket, GRPC, Ve Webrtc. Her protokolü arkasındaki teknolojiyi araştırarak keşfedeceğiz, ne’En iyi kullanılır ve güçlü ve zayıf yönleri.
· 26 Eylül 2022’de yayınlandı
İletişim biçimlerimiz sürekli gelişiyor: daha hızlı, daha rahat ve daha güvenilir hale geliyor. İletişimimiz, taşıyıcı güvercinleri kullanarak mesaj göndermekten, posta postasına, sabit hattın icatına, ceplerimize uyan küçük bir cihazdan e -posta ve kısa mesajlara dönüştü.
Gelecekte, toplantıları ve doğum günü partilerini VR’ye geçebiliriz (umarım bu sadece bir şaka!). Ancak en iyi iletişim biçimi her zaman duruma bağlı olacaktır.
Hızlı bir metin mesajı bazen uzun bir e -postadan daha iyidir. Diğer zamanlarda, ekiple bir video görüşmesi, bilgi alışverişinde bulunmanın en iyi yoludur. Buna karşılık, önemli sigorta belgeleri normal posta üzerinden gönderilmeli ve basılı kopyada teslim edilmelidir.
Aynı şey kullandığımız web teknolojileri ve protokoller için de geçerlidir. Farklı uygulamaların farklı iletişim ihtiyaçları vardır.
Genel bakış
Bu makalede biz’Biraz popüler kapsıyor İletişim Protokolleri Geliştirici olarak kullanabilir ve farklı seçeneklerin artılarını ve eksilerini keşfedebiliriz. Hiçbir çözüm diğerinden daha iyi değildir – sadece belirli bir uygulama veya sorun için daha iyi olan bazıları vardır.
Bazı uygulamalar, düşük gecikme ve yüksek veri aktarımı ile eşler arası bir bağlantı gerektirir ve bazı paket (bilgi) kaybını kabul edebilir. Diğer uygulamalar sunucuyu ihtiyaç duyulan bir şekilde anket yapabilir ve DON’Farklı bir akrandan iletişim almanız gerekiyor. Diğer uygulamalar veri güvenilirliği ile gerçek zamanlı iletişim gerektirir.
Çevrimiçi çok oyunculu bir oyun, mesajlaşma uygulaması, blog web sitesi, medya galerisi uygulaması ve video konferans yazılımının hepsinin farklı düzeylerde iletişim ve veri ihtiyaçları var.
Bir video akışı çözümü oluşturuyorsanız, başka hususlar da var, doğru olanı seçme hakkında daha fazla bilgi için video akışı protokolleri hakkındaki makalemize bakın.
İletişim protokolü nedir?
Bilgisayar Ağı’nda, bir protokol, verilerin cihazlar arasında nasıl değiştirildiğini yöneten bir kurallar kümesidir. Protokol, iletişimin kurallarını, sözdizimini, anlambilimini ve senkronizasyonunu ve olası hata kurtarma yöntemlerini tanımlar.
Bu makalede tartışılan protokoller, uygulama katmanı yazılımının birbirleriyle nasıl etkileşime gireceğini tanımlar. Farklı protokoller farklı kurallara bağlıdır ve’her birinin güçlü yönlerini ve sınırlamalarını anlamak için gerekli. Bu makalede sen’Aşağıdaki protokolleri öğrenecek:
HTTP (Hipermetin Aktarım Protokolü) Dağıtılmış, İşbirlikçi ve Hiper Media Bilgi Sistemleri için bir Uygulama Protokolüdür. HTTP, World Wide Web için veri iletişiminin temelidir. Köprü metin, metin içeren düğümler arasında mantıksal bağlantılar (köprüler) kullanan yapılandırılmış metindir. HTTP, hipermetin değiştirme veya aktarma protokolüdür.
HTTP/2 orijinal HTTP protokolünün eksikliklerini ele almak ve performansı artırmak için tasarlanmıştır. HTTP/2, HTTP/1’den daha hızlı ve daha verimlidir.1 ve tek bir bağlantı üzerinden birden fazla istek ve yanıtın çoğalmasına izin vermek için çoğullamayı destekler. Diğer önemli özellikler arasında başlık sıkıştırma ve sunucu pushası bulunur. BT’Yavaş yavaş web trafiği için varsayılan protokol haline geliyor.
WebSocket bir istemci ve sunucu arasında iki yönlü iletişime izin veren bir protokol. Sohbet uygulamaları, çevrimiçi oyun ve canlı veri akışı gibi gerçek zamanlı verileri işleyen uygulamalar için popüler bir seçimdir.
GRPC nakliye için HTTP/2 kullanan modern bir açık kaynaklı RPC çerçevesidir. Çok sayıda küçük, hızlı API çağrıları yapması gereken uygulamalar için mükemmel bir seçim. GRPC, birçok dil için platformlar arası istemci ve sunucu bağları oluşturur, bu da bir istemci uygulamasının yerel bir nesne gibi farklı bir makinede bir sunucu uygulamasında doğrudan bir yöntem çağırmasını mümkün kılar.
Webrtc müşteriler arasında gerçek zamanlı iletişime izin veren ve doğrudan eşler arası bağlantılar kurmayı mümkün kılan bir teknolojidir. Video, sohbet, dosya paylaşımı ve canlı video akışı uygulamaları için kullanılır.
TCP ve UDP’yi anlamak
Yukarıda belirtilen uygulama katmanlarına girmeden önce’TCP ve UDP hakkında temel bir anlayışa sahip olmak, veri aktarımını temelde farklı şekillerde kolaylaştıran altta yatan iki taşıma katmanı.
TCP (Şanzıman Kontrol Protokolü) İnternet aracılığıyla bir ağ görüşmesinin nasıl kurulacağını ve sürdürüleceğini tanımlayan bir standarttır. TCP, internette en sık kullanılan protokol ve bağlantı odaklı herhangi bir ağdır. Web’e göz attığınızda, bilgisayarınız bir web sunucusuna TCP paketleri gönderir. Bir web sunucusu TCP paketlerini bilgisayarınıza geri göndererek yanıt verir. Herhangi bir veri değiştirilmeden önce iki cihaz arasında bir bağlantı kurulur ve TCP, tüm paketlerin başarıyla teslim edilmesini sağlamak için hata düzeltmesi kullanır. Bir paket kaybolur veya bozulursa, TCP onu yeniden göndermeye çalışır.
UDP (Kullanıcı Datagram Protokolü) bağlantısız, güvenilmez bir taşıma katmanı protokolüdür. Bir bağlantının kurulması veya bakımının yapılması gerekmez ve mesajların sırayla teslim edileceğini garanti etmez. Yani bir paket gönderilmezse veya’B bozuk. UDP genellikle akış medyası veya bırakılan paketlerin teslimat sağlamaktan daha az sorunlu olduğu gerçek zamanlı uygulamalar için kullanılır.
HTTP/1
BT’Uygulama katmanında tüm İnternet tabanlı iletişim ve veri aktarımının temelini temel almanız önemlidir – HTTP (Hipermetin Aktarım Protokolü).
Diğer protokolleri daha ayrıntılı olarak keşfetmeden önce HTTP/1’i ve sınırlamalarını anlamak da önemli olacaktır.
HTTP ile müşteriler ve sunucular tek tek mesaj alışverişi yaparak iletişim kurar. İstemcinin gönderdiği mesajlara istek denir ve sunucu tarafından gönderilen mesajlara yanıtlar denir. Bu mesajlar bir TCP bağlantısı üzerinden normal metin mesajları olarak gönderilir. Ayrıca TLS kullanılarak şifrelenebilir ve HTTPS protokolü kullanılarak gönderilebilir.
Bir istemci genellikle bir web tarayıcısı veya bir kullanıcı üzerinde çalışan uygulama olacaktır’S telefon veya bilgisayar, ancak teknik olarak herhangi bir şey olabilir, örneğin, web sitelerini tarayan bir komut dosyası olabilir.
HTTP istekleri istemciden sunucuya yalnızca bir yönde akabilir. Sunucunun istemci ile iletişimi başlatmasının bir yolu yoktur; Sadece isteklere yanıt verebilir.
HTTP, bilgilerin ihtiyaç duyduğu şekilde getirildiği geleneksel web ve müşteri uygulamaları için mükemmeldir. Örneğin, bir sayfayı yenilersiniz ve sunucuya en son bilgileri almak için bir istek yapılır.
Ancak, bu protokol başlangıçta amaçlanmayacak şekilde genişledi. Aşağıdaki bölümlerde biz’HTTP/1’den bazılarını keşfedin’S Sınırlamaları.
HTTP/1 Gerçek Zamanlı
HTTP/1, mesajların istemciden sunucuya gerçek zamanlı olarak gönderilmesi gerektiğinde verimsizdir ve bunun tersi. Örneğin, sunucuda istemci ile paylaşılması gereken yeni bilgiler mevcutsa, bu işlem yalnızca istemci bir talep başlattığında gerçekleşebilir.
Bunun için HTTP kısa ve uzun oylama adı verilen teknikleri ve sunucu tarafından satılan olayları kullanarak geçici çözümler var.
Kısa oylama
HTTP Kısa Yoklama, istemcinin yeni verilerle yanıt verene kadar sunucuya tekrar tekrar istek gönderdiği bir tekniktir. Veri aldıktan sonra işlemi tekrar başlatır ve başka bir şey mevcut olana kadar tekrar tekrar sorar.
Bu, HTTP isteklerini/yanıtlarını sürekli olarak ileterek ve ayrıştırarak çok fazla kaynak harcadığı için verimsiz bir gerçek zamanlı iletişim stratejisidir.
Uzun anket
HTTP Uzun Yoklama ile istemciden tek bir istekte bulunulur ve daha sonra sunucu, yeni veriler mevcut olana ve bir yanıt gönderilinceye kadar bu bağlantıyı açık tutar. Müşteri yanıtı aldıktan sonra, hemen tekrar yeni bir bağlantı yapılır.
Uzun oylama kısa yoklamadan daha etkilidir, ancak gerçek zamanlı iletişim için en uygun çözüm değildir.
Sunucu Santimli Etkinlikler (SSE)
Sunucu Gönderen Etkinlikler, bir istemcinin bir bağlantıyı açmasına ve bir sunucudan gerçek zamanlı olarak bir sunucudan güncellemeleri (mesajları push) almasına izin verir. Bu tek yönlü bir bağlantıdır, bu nedenle istemciden sunucuya etkinlik gönderemezsiniz.
SSE, ilk müşteri bağlantısı kurulduktan sonra sunucuların istemcilere nasıl veri iletimini başlatabileceğini açıklayan bir standarttır.
HTTP/1 ile ilgili performans sorunu
HTTP veri akışlarının çoğu küçük, patlamalı veri transferlerinden oluşurken, TCP uzun ömürlü bağlantılar ve toplu veri transferleri için optimize edilmiştir. Ağ gidiş -dönüş süresi, çoğu durumda TCP veriminde ve performanstaki sınırlayıcı faktördür. Sonuç olarak, gecikme performans darboğazdır ve çoğu web uygulaması bunu sunar.
Yukarıdakilerin anlamı, HTTP’nin kullandığı TCP’nin uzun ömürlü bağlantıları işlemek ve çok fazla veri aktarmak için inşa edilmesidir. HTTP/1 ise bir sürü kısa ömürlü TCP bağlantısı açar ve genellikle sadece küçük veri parçaları gönderir.
Satır Başı Engelleme
HTTP/1 ile ilgili bir performans sorunu.0, her istek/yanıt için yeni bir TCP bağlantısı açmanız gerektiğidir. Bu, HTTP’nin başlangıçta icat edildiği şey için bir sorun değildi – bir hipermetin belgesini almak için. Belge kısmı önemlidir çünkü HTTP amaçlı değildi “hiper medya”.
Web geliştikçe her istek için yeni bir TCP bağlantısı açmak bir sorun haline geldi. Basit web sayfaları yerine tam uygulamalar oluşturmaya başladık ve almak için gereken bir tarayıcının sayısı daha fazla oldu. HTML, CSS ve JavaScript dosyasının yanı sıra çeşitli resimler ve diğer varlıklar gerektiren tipik bir web uygulaması hayal edin. Her dosya için yeni bir bağlantı yapılması gerekiyordu.
Boyunca http/1 geliyor.1, aynı TCP bağlantısında birden fazla istek veya yanıt alabileceğimizi tanımlayan kalıcı bağlantılara sahip.
Bu çözüm kesinlikle bir gelişmedir, ancak sunucunun aynı anda birden fazla yanıtla yanıt vermesine izin vermez. BT’S Serileştirilmiş bir protokol, bir istek göndermeniz ve yanıtı beklemeniz, ardından ikinci talebi göndermeniz vb. Bu, hat başı engelleme olarak bilinir.
Bununla birlikte, bir tarayıcı aynı kökene altı TCP bağlantısı açabileceğinden, bazı paralellik elde etmek mümkündür – nerede “Menşei” benzersiz kombinasyonu olarak tanımlanır ev sahibi Ve liman sayı.
Örneğin, 12 resim yüklemesi gereken bir fotoğraf galerisi uygulamanız varsa, ilk altı görüntüyü yüklemek için altı istekte bulunulacak ve her istek kaputun altına yeni bir TCP bağlantısı açacaktır. Bir yanıt alınana kadar diğer altı görüntü engellenecek ve bir sonraki görüntüyü yüklemek için açık bağlantılardan biri kullanılabilir. Aynı kökene olan orijinal altı açık TCP bağlantısı, kullanılabilir hale geldikçe yeniden kullanılacaktır, ancak altı aktif bağlantı ile sınırlısınız.
Doğal olarak, programcılar kolay bir çözüm buldular – kökeni değiştirerek. Tüm varlıkları aynı başlangıçta barındırmak yerine, bir başlangıçta ve geri kalanını diğerinde altına barındırırsınız. Artık 12 eşzamanlı istek (veya TCP bağlantılarınız açabilirsiniz). Buna denir “kırma”.
- Görüntüler 1-6 1’de barındırıldı.Görüntüler.com
- Görüntüler 7-12 2’de barındırıldı.Görüntüler.com
Bunu kaç kez yapabileceğiniz konusunda bir sınırlama var ve’optimal sayıda parçayı belirlemek zor. Bir noktada, daha fazla parça eklemek karmaşıklığı artıracak, ek yük ekleyecek ve bağlantıların tıkanmasına ve paketlerin kaybolmasına neden olabilir.
Her TCP bağlantısı sunucuya gereksiz yük eklediğinden başka endişeler de var. Bağlantılar birbirleriyle rekabet eder, her TCP ve TLS el sıkışma gereksiz maliyet katar ve aktif bağlantıları korumak için diğer sunucu/proxy kaynakları kullanılmalıdır. HTTP/1’in temel TCP bağlantılarını kullanma biçiminde açık bir sınırlama var.
Başlıklar ve kurabiyeler şişkinlik
Başka bir sorun, HTTP spesifikasyonunun geliştikçe, spesifikasyona daha fazla başlığın eklenmesi. Geliştiriciler ayrıca başlıklara çerez ekleme seçeneğine sahiptir ve bunlar keyfi olarak büyük olabilir. Bu, her istek ve yanıtın tüm bu metin bilgilerini iletmesi gerektiğinden çok fazla şişkinlik ekler ve HTTP/1.1, başlıkları ve meta verileri sıkıştırma mekanizması içermez.
Yüksek performanslı bir RPC protokolüne ihtiyacınız varsa, bu ek yük hızlı bir şekilde eklenir ve HTTP artık en uygun çözüm değildir.
Öncelik verme
HTTP/1 ile.1, tarayıcılar “öncelik vermek” Kaynaklar Müşteriye öncelikli bir kuyruk tutarak ve mevcut TCP bağlantılarının en iyi şekilde nasıl kullanılacağı konusunda eğitimli tahminler alarak kaynaklar. Tarayıcılar, hangi kaynakların diğerlerinden daha değerli olduğunu belirlemek için sezgisel yöntemleri yerleştirdiler.
Örneğin, CSS yüklenmesi, görüntüleri yüklemekten daha yüksek bir öncelik alacaktır.
Sorun şu ki, geliştirici olarak, bir talebi diğerine öncelik vermenin veya devam eden bir mesajın önceliğini değiştirmenin bir yolu olmamasıdır. Önce hangi içerik yüklenir tarayıcıya bağlıdır ve önceliklendirme şemasında sözünüz yoktur.
HTTP/2
HTTP/2, HTTP protokolünün geliştirilmiş bir versiyonudur ve yukarıda HTTP/1 ile belirtilen tüm performans sorunlarını ele alır ve semantiği değiştirmeden (fiiller, başlıklar, vb.) Diğer geliştirmeleri ekler.
HTTP/2’deki en önemli değişiklik, aynı anda birden fazla HTTP isteği ve yanıtını göndermek ve almak için çoğullama kullanımıdır Tek TCP bağlantısı. Tüm HTTP/2 bağlantıları kalıcıdır ve menşe başına yalnızca bir bağlantı gereklidir. Bu, ağ kaynaklarının çok daha verimli kullanımını sağlar ve uygulamaların performansını önemli ölçüde artırabilir.
HTTP/2’nin diğer bazı faydaları:
- Aynı düz metin başlıklarının tekrar tekrar gönderilmesini önleyen başlıkların boyutunu azaltmak için başlık sıkıştırmasını kullanır. Bu, isteklerin/yanıtların ek yükünü ve gönderilen veri miktarını önemli ölçüde azaltır.
- Önceliklendirmeyi sağlar ve müşterinin (geliştiricinin) ihtiyaç duyduğu kaynakların önceliğini belirtmesine izin verir. BT’Ayrıca, devam eden isteklerin önceliğini güncellemek mümkün – örneğin, bir görüntü artık görünmüyorsa, öncelik değişebilir.
- İstemeden istemciye veri göndermek için sunucu push kullanır. Bu, müşterinin birden fazla istek yapma ihtiyacını ortadan kaldırarak yükleme sürelerini iyileştirmek için kullanılabilir.
HTTP/2 nasıl çalışıyor?
HTTP/2’deki temel protokol birimi bir çerçeve. Bu yeni ikili çerçeveleme mekanizması, verilerin istemci ve sunucu arasında değiştirilme şeklini değiştirir.
Standart, her biri farklı bir amaca hizmet veren on farklı çerçeve türünü tanımlar. Örneğin, başlıklar ve veri çerçeveleri HTTP isteklerinin ve yanıtlarının temelini oluşturur:
A çerçeve belirli bir veri türü taşıyan en küçük iletişim birimidir.
Diğer bazı çerçeve örnekleri:
- Ayarlar: Başlangıçta veya bağlantı sırasında ayar bilgilerini değiştirme.
- Öncelik: Mesajlar için önceliği yeniden atama.
- Push_promise: sunucunun verileri size aktarmasına izin verir – bu, sunucunun ne göndereceğine dair bir söz olarak işlev görür. Örneğin, dizin isterseniz.html, sunucu uygulamayı bastırmayı vaat eden bir push_promise oluşturabilir.JS ve Stiller.CSS, yani müşterinin bu kaynakları talep etmesi gerekmiyor.
Çerçeveler birleştirecek şekilde birleştirilir İleti, Örneğin, yukarıdaki resimdeki başlık ve veri çerçevesi. Bu normal bir istek veya yanıtla eşittir.
Sonunda, bir dizi mesaj bir parçası olabilir aktarım. Bu, istemci ve sunucu arasında çift yönlü bir veri akışına ve tam istek ve yanıt çoğaltma.
Yukarıdaki resim biraz yanıltıcıdır ve istemci ve sunucu arasında birden fazla bağlantının açık olduğu izlenimini verir. Ancak bu tek bir TCP bağlantısıdır ve veriler istemci ve sunucu arasında engellenmeyen bir şekilde serbestçe akar.
Yeni ikili çerçeveleme katmanı, istemcinin ve sunucunun HTTP mesajını bağımsız çerçevelere ayırmasına, bunları sergilemesine ve daha sonra diğer uçta yeniden birleştirmesine olanak tanır.
Bu sadece http/2’nin bir özeti.0 İş. Daha fazla bilgi edinmek ve önceliklendirme, sunucu itme ve başlık sıkıştırmasını keşfetmek istiyorsanız, bunu derinlemesine makaleye bakın. HTTP/1 sorunlarının bir geçmişi ve HTTP/2 bunları nasıl çözdüğü için bu videoyu izleyin.
HTTP/2 çift yönlü veri akışı
- Tek bir HTTP/2 bağlantısı, her ikisi de birden çok akıştan uç nokta birbirine katılan çerçevelerle eşzamanlı olarak birden fazla açık akış içerebilir.
- Akışlar tek taraflı olarak kurulabilir ve kullanılabilir veya istemci veya sunucu tarafından paylaşılabilir.
- Akışlar her iki uç nokta ile kapatılabilir.
HTTP/2 üzerindeki bir sunucunun proaktif olarak ihtiyaç duyduğunu düşündüğü kaynakları göndermesine izin veren sunucu push işlevselliği ile çok fazla yanlış anlama var, örneğin, örneğin, .JS ve .CSS dosyaları, istemci istemeden. Bunun çift yönlü akışla ilgisi yoktur ve önbelleğe alınabilir kaynaklar için yalnızca bir web optimizasyon tekniğidir.
Doğru olan, HTTP/2 ile sunucu olabilir’T Başlat aktarım. Ancak istemci bir istek göndererek bir akış açtığında, her iki taraf da veri gönderebilir çerçeveler herhangi bir zamanda kalıcı bir soketin üzerinde. Bunun mükemmel bir örneği, daha sonra tartışacağımız GRPC’dir.
HTTP/2 ile çift yönlü veri akışı elde etmek mümkündür ve bunu iddia edebilirsiniz’WebSockets gibi bir şeyden daha optimal bir çözüm veya bunun olmadığını iddia edebilirsiniz. Biz’Bunu WebSocket bölümünde daha ayrıntılı olarak tartışın.
WebSockets
Bu teknolojinin amacı, birden fazla HTTP bağlantısı açmaya dayanmayan sunucularla iki yönlü iletişime ihtiyaç duyan tarayıcı tabanlı uygulamalar için bir mekanizma sağlamaktır (E.G., XMLHTTPRequest veya IFrame ve Uzun Yoklama Kullanımı).
WebSocks, bir istemci ve sunucu arasında tam çift yönlü iletişim sağlamak için icat edildi, bu da verilerin hemen tek bir açık bağlantı aracılığıyla her iki yönden seyahat etmesini sağlayan.
Bir WebSocket bağlantısı oluşturulduktan sonra, istemcinin güncellemeler için bir sunucuyu anketine gerek yok. Bunun yerine, iletişim iki yönlü olarak gerçekleşir. Bu, HTTP/1’in orijinal uzun ve kısa tozlanmasına kıyasla hız ve gerçek zamanlı özelliği artırır. WebSocket’in uygun olduğu bir formatı yok. Herhangi bir veri, metin veya bayt gönderebilirsiniz – bu esneklik, WebSockets’in popüler olmasının nedenlerinden biridir.
Bunlardan bazıları HTTP/2 bölümünde tartıştığımız şeye tanıdık gelebilir, ancak’WebSokets’in HTTP/2’den çok önce icat edildiğini belirtmek önemlidir. Biz’Onları daha sonra karşılaştıracak.
WebSockets Nasıl Çalışır?
WebSockets TCP üzerinden etkili bir taşıma katmanı olarak çalışır.
Bir WebSocket bağlantısı kurmak için istemci ve sunucunun önce normal bir HTTP/1 üzerinden bir el sıkışma yapması gerekir.1 bağlantı. Bu el sıkışma HTTP’den WebSockets’e köprüdür.
Aşağıda örnek bir müşteri el sıkışma isteği var. Müşteri bir HTTP/1 kullanabilir.1 Mekanizma, bağlantılarını HTTP’den WebSockets’e değiştirmek için yükseltme başlığı olarak adlandırılan mekanizma:
Get /sohbet http /1.1 ana bilgisayar: örnek.Com: 8000 Yükseltme: WebSocket Connection: Yükseltme Sec-weblet-tuş: dghlihnhbxbszsbub25jzq == sec-weblet-sürüm: 13
Sunucu daha sonra el sıkışmasını, protokolün HTTP’den WebSocket’e geçeceğini gösteren özel bir yanıtla sonuçlandıracaktır:
HTTP/1.1 101 Anahtarlama Protokolleri Yükseltme: WebSocket Bağlantısı: Yükseltme Sec-Websocket-Affice: S3PPLMBITXAQ9KYGZZHZRBK+Xoo =
WebSockets, WS: // veya WSS: // Şemaya sahip tek tip bir kaynak tanımlayıcısı (URI) gerektirir. WS: // Şema şifrelenmemiş bağlantılar için kullanılır ve WSS: // Şema, HTTP URL’lerinin http: // veya https: // şema kullanmaya nasıl benzer şekilde şifrelenmiş bağlantılar için kullanılır.
İki yönlü iletişim kanalı kurulduktan sonra istemci ve sunucu mesaj gönderebilir. Bu mesajlar ikili verilerden metne kadar her şey olabilir. WebSocket bağlantısı, istemci veya sunucu bağlantısı kesilene kadar açık kalacaktır.
WebSocket Çoğullama
Yazma sırasında, WebSocket protokolü yerleşik çoğullamayı desteklemez. HTTP/2 bölümünde çoğullamayı tartıştık ve bunu öğrendik’S HTTP/2 için yerleşik bir özellik ve’aynı bağlantı üzerinde çoklu akışların çoğalması mümkün. Her akış benzersiz bir tanımlayıcı alır ve gönderilen tüm çerçevelerin karşılık gelen akışla ilişkili bir kimliği vardır.
Çoğullamayı desteklememe, WebSocket protokolünün her WebSocket bağlantısı için yeni bir taşıma bağlantısı gerektirdiği anlamına gelir. Örneğin, aynı tarayıcının farklı sekmesinde çalışan birden fazla istemci ayrı bağlantılarla sonuçlanacaktır. WebSockets üzerinden çoğullamaya sahip olmak, genellikle geliştirici olarak uygulamanız veya üçüncü taraf bir eklentiye veya kütüphaneye güvenmeniz gereken bir şeydir.
WebSocket vs HTTP/2
Yani, http/2, websocks’ın yerini aldı? Kısa cevap hayır. Daha uzun cevap, HTTP/2’nin çift yönlü akışı mümkün kıldığı ve sonuç olarak WebSoketler tek/en iyi seçenek değildir. HTTP/2 Spec olarak WebSockets’e kıyasla sizin için daha fazla iş çıkarıyor. Yerleşik çoğullama vardır ve çoğu durumda, kökeni daha az açık TCP bağlantısı ile sonuçlanacaktır. Öte yandan, WebSockets çok fazla özgürlük sağlar ve bağlantı kurulduktan sonra istemci ve sunucu arasında verilerin nasıl gönderildiği konusunda kısıtlayıcı değildir. Ancak, yeniden bağlanmayı kendiniz yönetmeniz gerekir (veya bunu sizin için yapan bir kütüphaneye güvenmeniz gerekir).
Hangisi nihayetinde daha iyi ve birinin çalışacağı ve diğeri olmayacağı, tartışmaya hazır ve bu makale düşünceli bir cevap vermiyor. WebSockets çok fazla esneklik sunar ve yerleşik bir standart olarak, tüm modern tarayıcılar tarafından tamamen desteklenir ve istemci ve sunucu kitaplıkları etrafındaki ekosistem sağlamdır.
Daha ayrıntılı ve düşünceli tartışmalar için bu yığın taşma sorularına bakın:
- HTTP/2, WebSocket’i geçersiz kılıyor mu
- HTTP/2 veya düşük gecikme istemcisi için WebSockets – Sunucu Mesajları
- Çift yönlü mesaj akışı için http/2 vs web-soketler
Ayrıca, WebSocket protokolünü bir HTTP/2 bağlantısının tek bir akışı üzerinde çalıştırmak için bir mekanizmaya izin veren bir RFC de vardır.
HTTP/2’den WebSockets’i bootstrap yapabilmek, bir TCP bağlantısının her iki protokol tarafından paylaşılmasına ve HTTP/2’nin ağın WebSockets’e daha verimli kullanımını genişletmesine olanak tanır.
Bu Chrome ve Firefox’ta uygulandı. Chrome tasarım belgesini ve motivasyonunu buradan okuyabilirsiniz.
WebSockets’i ne zaman kullanmalısınız??
WebSocks, gerçek zamanlı olarak iki yönlü iletişime ihtiyaç duyan ve küçük veri parçalarının hızlı bir şekilde iletilmesi gerektiğinde en uygun olanlar için en uygun olanıdır:
- Sohbet uygulamaları
- Çok oyunculu oyunlar
- İşbirlikçi düzenleme uygulamaları
- Canlı Spor Ticker
- Stok Ticaret Başvurusu
- Gerçek Zamanlı Etkinlik Beslemeleri
Tesadüfen, bu ekibimizin çok fazla deneyime sahip olduğu bir alandır. Biz’Sohbetimize ve etkinlik beslemelerimize güç sağlamak için WebSockets’i kapsamlı bir şekilde kullanma Altyapı.
WebSockets için destek iyidir ve büyük tarayıcılar ve müşteriler tarafından uzun zamandır desteklenmiştir ve aynı zamanda iyi belgelenmiştir ve kullanımı kolaydır. Ancak, WebSocks aşırı kullanılmamalıdır; Ne istediğinize bağlı olarak, daha iyi alternatifler olabilir.
Örneğin, Sunucu Gönderilen Etkinlikler (SSE) HTTP/2 üzerinden etkilidir ve kullanımı kolaydır. SSE iki yönlü bir iletişim sistemi değildir; Sunucu, verileri tek taraflı olarak istemciye iter. Ancak, ihtiyacınız olan tek şey sunucunun bir istemciye veri göndermesinin bir yolu ise, bu potansiyel olarak WebSockets ek yükünü eklemekten daha iyi bir seçenektir. SSE ayrıca HTTP/1’e geri döner.1 HTTP/2 mevcut olmadığında. Ayrıca, istemci (veya tarayıcı) bağlantıyı sizin için yönetir ve otomatik yeniden bağlanmayı destekler.
WebSockets üzerinden bir bağlantı kaybolursa, yük dengeleme veya yeniden bağlanma için dahil edilen mekanizmalar yoktur. Bu manuel olarak veya üçüncü taraf kütüphaneler tarafından uygulanmalıdır.
GRPC
GRPC, herhangi bir ortamda çalışabilen modern bir açık kaynaklı yüksek performanslı uzaktan prosedür çağrısı (RPC) çerçevesidir. Veri merkezlerinde ve arasında hizmetleri, yük dengeleme, izleme, sağlık kontrolü ve kimlik doğrulaması için takılabilir desteği ile verimli bir şekilde bağlayabilir. Ayrıca, cihazları, mobil uygulamaları ve tarayıcıları arka uç hizmetlerine bağlamak için dağıtılmış bilgi işlemin son milinde de geçerlidir.
GRPC, başlangıçta Google’da geliştirilen açık kaynaklı, sözleşme tabanlı, RPC sistemidir. GRPC, uygulamaların şeffaf bir şekilde iletişim kurmasını sağlar ve bağlı sistemlerin oluşturulmasını basitleştirir.
Birçok dil için platformlar arası istemci ve sunucu bağları oluşturur, bu da bir istemci uygulamasının, yerel bir nesne gibi farklı bir makinedeki sunucu uygulamasında bir yöntemi doğrudan çağırmasını mümkün kılar.
HTTP/2 üzerine inşa edilen GRPC, çift yönlü akış ve yerleşik taşıma katmanı güvenliği (TLS) gibi özellikleri kaldırır.
GRPC Motivasyonu
BT’GRPC’nin arkasındaki motivasyona dalmak önemlidir ve neden faydalarını anlamak için icat edildi. Neden zaten sahip olduğumuz mevcut teknolojiyi kullanmıyorsunuz: örneğin HTTP/2 ve WebSockets? Neden zaten sahip olduğumuz şeyin üstünde başka bir soyutlama katmanına ihtiyacımız var??
Verilerin İnternet üzerinden yapılandırılmasının ve gönderilebilmesinin çeşitli yolları vardır. Bazı popüler örnekler sabun, dinlenme ve grafik. Kendi protokolünüzü bile oluşturabilir, ham TCP üzerinden veri gönderebilir ve isterseniz uygulamayı kendiniz halledebilirsiniz.
Ancak iletişim protokolünüz olarak ne seçerseniz seçin, sorun, istemci ve sunucunun protokol üzerinde anlaşmasını sağlamanız gerektiğidir. Örneğin, eğer’Bir REST API’sını oluşturun, REST verilerini göndermek için kullanmanız gereken istemci kütüphanesi HTTP kütüphanesidir. HTTP kitaplığı varsayılan olarak tarayıcıya yerleştirilmiştir ve tarayıcı sizin için her şeyi işler:
- Sunucu ile iletişim kurar.
- HTTP/2 ve geri dönüşü HTTP/1’e götürür. Ve gelecekte HTTP/3’ü desteklemesi gerekecek.
- TLS’yi ele alıyor ve protokolü müzakere ediyor.
- Başlıkları, akışları ve diğer her şeyi işler.
Ama ya sen’bir tarayıcıda değil? Ya sen’Bir sunucuda çalışan bir Python uygulaması, Golang CLI veya iOS’ta çalışan bir Flutter uygulaması? Bu müşterilerin hepsinin, iletişim kurduğunuz protokolü anlayan kendi HTTP kütüphanesine ihtiyacı vardır.
Neyse ki, birçok özel insan tüm bu diller ve çerçeveler için çeşitli HTTP kütüphaneleri üzerinde çalışıyor. Bazı dillerde farklı özelliklere sahip birden fazla HTTP kütüphanesi bile var. Ancak tüm bunlar bir maliyetle geliyor – ve bu bakım.
Bu maliyet, örneğin, kullandığınız Golang kütüphanesi bunu desteklerse, sunucunuzu HTTP/2’ye yükseltmeniz durumunda sizi etkileyebilir. Ancak, ön uç Python istemcinizde, eşdeğer HTTP kütüphanesi HTTP/2 uygulamamış veya artık korunamayabilir. Diğer dillerdeki farklı HTTP kütüphaneleri 1: 1 karşılaştırılamaz.
HTTP spesifikasyonu geliştikçe, bu kütüphaneler ilerlemeleri, güvenlik sorunlarını, yeni özellikleri ve diğer yamaları takip etmelidir. HTTP sadece bir örnektir ve aynı şey WebSocket Protokolü veya başka herhangi bir. Büyük tarayıcılarda bir şey iyi uygulanabilir, ancak bu işlevsellik birden fazla farklı dil ve çerçeveye taşınmalıdır.
GRPC nasıl farklı?
GRPC, popüler dillerin kendileri için kütüphaneyi koruyarak bu sorunu çözmeye çalışır, yani eklenen yeni özellikler tüm bu diller tarafından desteklenecektir.
Kaputun altında GRPC, protokol olarak HTTP/2 kullanır, ancak bu uygulama sizden gizlenmiştir. Gelecekte, GRPC koruyucuları HTTP/2’yi HTTP/3 ile kolayca değiştirebilir ve bu değişiklikten hemen yararlanacaksınız.
GRPC ayrıca arabirim tanımı dili (IDL) ve altta yatan mesaj değişim biçimi olarak protokol arabelleğini kullanır. Bu biçim dil açısından tarafsızdır ve farklı programlama dilleri arasında kolayca iletişim kurmayı mümkün kılar. Biz’Bir sonraki bölümde bu konsepti daha fazla keşfedin.
Protokol tamponları nelerdir?
Protokol arabellekleri, Google’ın yapılandırılmış verilerin serileştirilmesi için dil bağımsız, platform açısından bağımsız, genişletilebilir mekanizmadır-XML’yi düşünün, ancak daha küçük, daha hızlı ve daha basit. Verilerinizin bir kez nasıl yapılandırılmasını istediğinizi tanımlarsınız. Ardından, yapılandırılmış verilerinizi çeşitli veri akışlarına ve çeşitli veri akışlarından kolayca yazmak ve okumak ve çeşitli dilleri kullanmak için özel oluşturulan özel kaynak kodunu kullanabilirsiniz.
Geleneksel olarak bir API ile,’T Protokolün kendisi tarafından tanımlanan bir sözleşme var. Örneğin, eğer’dinlenmeyi kullanın, sen’Tipik olarak JSON Mesajları Aren Anahtar/Değer Çiftleri ile Gönderme’T mesaj alıcı uçtaki kadar kontrol edildi. Bu mesaj genellikle bir şey olabilir ve’Doğru yapının tanımlandığından emin olmak için size kalmış.
Aşağıdaki JSON yüküne bir göz atın:
‘İD’: 123 ‘isim’: ‘Gordon’, ‘e -posta’: ‘gordon@bir yerde.io’
Bu veriler istemci/sunucuda alındıktan sonra, bir nesneye düzenlenebilir, örneğin:
sınıf öğrencisi
Bununla birlikte, yukarıda belirtilen yük için doğru serileştirme ve deserilizasyon mantığını uygulamak geliştirici olarak size kalmıştır – bu, kod oluşturmaya dayanarak Tojson ve FromJson yöntemlerini manuel olarak yazmayı içerebilir veya sizin dilin yerleşik bir özelliği olabilir’yeniden kullanmak.
Bu verileri nasıl serileştirdiğinize bakılmaksızın, temel kodun potansiyel olarak birden fazla ortamda manuel olarak güncellenmesi gerekir, şema değişirse.
Protokol tamponları ile, alanlar için nesne türünü tanımlayan ve hangilerinin gerekli ve isteğe bağlı olduğunu belirleyen bir şema oluşturursunuz:
// kişiyi içeren istek mesajı’S Bilgi Mesajı Kişi < optional int32 required string name = 2; optional string email = 3; >// selamlama mesajını içeren yanıt mesajı helloreply
Daha sonra ortaya çıkarmak istediğiniz prosedürleri belirtebilirsiniz.
// tebrik hizmeti tanımı. Servis Selam < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
Bir zamanlar sen’Veri yapılarını ve şemayı belirtti, Proto tanımınızdan tercih ettiğiniz dilde veri erişim sınıfları oluşturmak için protokol arabellek derleyicisi Protoc’u kullanırsınız.
Bunlar, Proto dosyasında özetlenen nesneleri, her alan için aksesuarları ve tüm yapıyı çiğ bayt ile serileştirme/ayrıştırma yöntemlerini tanımlayan arayüzler olacaktır.
GRPC modları
GRPC üzerinde dört ulaşım modu var. Bu dört mod, daha önce tartıştığımız davranışı, örneğin normal bir istek/yanıt, SSE ve WebSockets’i tekrarlar.
Unary RPC
Unary RPC, bir işlevi çağırmaya benzer şekilde basit bir istek ve yanıttır. İstemci bazı veriler ister ve sunucu bazı işlemler yapar ve bu verileri döndürür.
Sunucu akışı rpc
İstemcinin sunucuya tek bir istek gönderdiği ve birden fazla veya yanıt akışı beklediği sunucu akışı RPC’leri. Müşteri, daha fazla mesaj olmayana kadar döndürülen akıştan okur.
Bir örnek, bir video yüklemeyi talep ettiğiniz video akışı olabilir ve sunucu video akışı ile yanıt verir.
İstemci Akışı RPC
İstemcinin bir dizi mesaj yazdığı ve yine sağlanan bir akış kullanarak bunları sunucuya gönderdiği istemci akışı RPC’leri. İstemci mesajları yazmayı bitirdikten sonra, sunucunun bunları okumasını ve yanıtını döndürmesini bekler.
Bir örnek sunucuya büyük bir dosya yüklemek olabilir ve tüm veriler gönderildikten sonra istemci, yüklemenin tamamlandığını belirtmek için son bir mesaj gönderebilir ve sunucu isteğe bağlı olarak yanıt verebilir.
Çift yönlü akış rpc
Hem istemci hem de sunucu akışının bir kombinasyonu. Bir sohbet uygulaması veya çok oyunculu bir video oyunu.
Her iki tarafın da bir okuma yazma akışı kullanarak bir dizi mesaj gönderdiği çift yönlü akış RPC’leri. İki akış bağımsız olarak çalışır, böylece istemciler ve sunucular istedikleri sırayla okuyabilir ve yazabilir.
Çift yönlü bir akış RPC’sinde, çağrı, yöntemi çağıran istemci tarafından başlatılır. İstemci ve sunucu tarafı akış işlemesi uygulamaya özgüdür. İki akış bağımsız olduğundan, istemci ve sunucu herhangi bir sırayla mesaj okuyabilir ve yazabilir.
Mikro hizmetler
GRPC’nin güçlü olduğu konusunda iyi bir örnek mikro hizmetler içindedir.
Bu örnekte, Python, Java ve Golang’da yazılmış mikro hizmetlerimiz var. Bunların kendi aralarında veri göndermesi gerekiyor.
HTTP/1 kullanarak.1 Ve JSON, her dil için HTTP bağlantılarını ve serileştirmeyi uygulamanızı gerektirecektir. Ayrıca, şemanın her dil için doğru bir şekilde uygulandığından emin olmanız gerekir ve API değişirse, tüm hizmetlerin manuel olarak güncellenmesi gerekir.
GRPC ise HTTP/2’nin uygulanmasını işler.Bizim için 0 Protokol. Tek bir şema yazılır ve kullanılan tüm diller için karşılık gelen kod oluşturulabilir. Bu şema, tüm dillerin uyması gereken bir sözleşme olarak görülebilir ve bu hizmetler arasında iletişim kurmayı çok daha kolay ve daha güvenilir hale getirebilir.
GRPC performansı
GRPC hızlıdır ve genellikle bir dinlenme eşdeğerinden çok daha fazla performanslıdır:
- Protokol tamponları serileştirilir ve tel üzerinde ikili, normal JSON mesajlarından önemli ölçüde daha küçük.
- GRPC HTTP/2 kullanır.0 daha fazla iyileştirme sağlayan
GRPC Gönderilen verilerin verimli bir şekilde sıkıştırılması önemli bir avantaja sahiptir, veri yükü iletilen veri yükü ne kadar küçük olursa, daha az TCP yuvarlak geziye ihtiyaç vardır. Maksimum İletim Birimi (MTU), ağa bağlı bir cihazın kabul edeceği en büyük veri paketini temsil eden bir ölçümdür, bu da 1.500 bayt.
Sıkıştırma sizin için işlenir ve sadece GRPC kullanarak yararlanırsınız. Alternatif olarak, düzenli HTTP göndermeden önce JSON mesajlarını sıkıştırmak için GZIP gibi bir şey kullanmak mümkündür. Ancak bu rahatsız edici olabilir ve bir karmaşıklık katmanı ekler. Farklı diller ve ortamlar, GZIP ve diğer eşdeğer sıkıştırma araçları için farklı düzeyde destek olabilir. Ve kullandığınız her dil için, doğru sıkıştırma ve iletişim mantığını kendiniz yeniden ifade etmeniz gerekecektir. Bu, HTTP kütüphanesi hakkında tartıştıklarımıza benzer bir sorundur.
GRPC’yi ne zaman kullanmalısınız?
Eğer sen’Yeniden, birbirleriyle sıkı bir şekilde entegre edilmesi gereken ve çok fazla veri gönderen hızlı ve sık iletişim gerektiren birden fazla farklı programlama dili kullanarak, GRPC mükemmel olacaktır.
- GRPC akışı ile’Güncellemeler için gereksiz talepte bulunmaya gerek kalmadan, yükleme/indirme ilerlemesini kolayca belirlemek mümkün.
- BT’istekleri iptal etmek mümkün.
- HTTP/2’nin tüm avantajları.
- GRPC dilinizi destekliyorsa,’dış kütüphaneler hakkında endişelenmelisiniz.
- GRPC tüm dilleri desteklemez.
- Şema kısıtlayıcı ve hantal hissedebilir.
- WebSockets’e kıyasla kurulumu karmaşık olabilir.
- Hala genç ve hataların hata ayıklanması zor olabilir.
- GRPC ile iletişim, web tarayıcıları ile yerel olarak kutudan çıkmaz. GRPC-Web Kütüphanesini kullanmanız gerekiyor.
Webrtc
WEBRTC Protokolü, uygulamanıza açık bir standardın üstünde çalışan gerçek zamanlı iletişim (RTC) özellikleri sağlayan ücretsiz, açık kaynaklı bir projedir. Akranlar arasında gönderilen video, ses ve genel verileri destekler.
Teknoloji, tüm büyük tarayıcılar için bir dizi JavaScript API’si ve Android ve iOS uygulamaları gibi yerel müşteriler için bir kütüphane olarak mevcuttur.
WebRTC, WebSockets ve GRPC’den temel bir şekilde farklıdır ve bir bağlantı kurulduktan sonra, veriler (bazı koşullar altında) sunucuya dokunmadan doğrudan tarayıcılar ve cihazlar arasında iletilebilir.
Bu gecikmeyi azaltır ve WebRTC’yi ses, video veya ekran paylaşımı için mükemmel hale getirir – düşük gecikmenin önemli olduğu ve çok fazla verinin gönderilmesi gereken.
Webrtc Motivasyonu
WebRTC, ses ve video gibi medyanın tel üzerinden nasıl iletildiğini standartlaştırmayı ve bunu kullanımı basit bir API ile uygun bir şekilde gerçekleştirmeyi planlıyor.
WebSockets gibi diğer çözümler, iki akran arasında herhangi bir veri iletmeyi mümkün kılar; Ancak, bu verilerin bir proxy veya sunucu aracılığıyla iletilmesi gerekir. Başka bir sunucuya güvenmek gecikme ekler, çünkü aracılığıyla gönderilen her şeyin bakılması, işlenmesi ve şifresini çözmesi gerektiği. İki akran arasında bir orta adam var. Video akışı veya hatta gerçek zamanlı sohbet için bu gecikme istenmeyen.
Tarayıcılar da birkaç yıl öncesinden daha güçlü. Tarayıcılar, yerleşik bir API ve bu zengin bilgileri iletmenin kolay bir yolunu gerektiren web kamerasına ve mikrofona erişebilir. WebRTC, tüm bu işlemi basitleştirmeyi ve kullanımı kolay bir API’yi tarayıcılarda yerleşik olarak ortaya koymayı amaçlamaktadır.
Webrtc ile ilgili sorun
Motivasyon tanımlanmıştır ve WebRTC’nin iki akran arasında daha hızlı iletişime izin veren büyülü bir çözüm olduğu görülmektedir. Ama maalesef birkaç sorun var.
İlk sorun, eşler arası bir bağlantı kurmanın basit olmamasıdır-İnternet karmaşıktır ve California’daki Alice ve Güney Afrika’da Ben arasında birçok yönlendirici, vekil ve güvenlik duvarı vardır. Ve bazı durumlarda, iki akran arasında doğrudan bir çizgiye sahip olmak mümkün olmayabilir. İki akran arasındaki bir bağlantının, açık bağlantıları önleyen bir güvenlik duvarını atlaması gerekebilir, potansiyel olarak genel bir IP adresine sahip olamazsınız veya yönlendirici akranları arasında doğrudan bağlantıya izin vermeyebilir.
İkinci sorun, iki akranın birbirini keşfetmesinin ve iletişimin gerçekleşebileceği en uygun yolu belirlemesinin bir yolu olması gerektiğidir. Bu, birbirleriyle en iyi nasıl iletişim kuracaklarını bilmeden önce iki istemci arasında belirli bilgilerin paylaşılmasını gerektirir – ve bu bilgileri paylaşmanın ortak bir yolu WebSockets’i kullanmaktır.
Hangisi biraz komik. Bir HTTP bağlantı bir WebSocket sadece bir bilgi paylaşmak için bağlantı kurmak Webrtc bağlantı.
WebRTC’nin ne yaptığını ve karmaşıklığını gerçekten takdir etmek istiyorsanız, potansiyel olarak tanıdık olmayan bazı terimlere aşina olmanız gerekir: Nat, Sert, Turn, Ice, SDP ve sinyalizasyon.
Webrtc nasıl çalışır?
Yukarıdaki genel bakışta, nasıl çalıştığına dair temel fikri açıklayan WebRTC’nin motivasyonunu açıkladık. Bu bölüm, WebRTC’yi tam olarak kavramak için anlamanız gereken bazı alt düzey konulara dalacaktır.
Ağ Adresi Çevirisi (NAT)
Nat’ın ne olduğunu ve nasıl çalıştığını anlamak WebRTC’yi anlamak için gereklidir.
NAT, cihazınıza (dizüstü bilgisayar veya cep telefonu) genel IP adresi vermek için kullanılır; Bu önemlidir çünkü muhtemelen her ikisi de bir yönlendiricinin arkasında olan iki akran arasında bir bağlantı kurmak istiyoruz. Bir yönlendiricinin genel bir IP adresi olacaktır ve yönlendiriciye bağlı her cihazın özel bir IP adresi olacaktır.
Bu cihazlar arıyor’t doğrudan internete maruz kaldı. Bunun yerine, tüm trafik dış dünyayla iletişim kuran yönlendiriciden geçer. Uzak bir sunucudan kaynak talep ettiğinizde, yönlendirici sorumludur “yönlendirme” Yerel makinenizden o sunucuya olan istek ve sunucunun yanıtı yerel makinenize geri yönlendirme.
Bu istekler cihazdan çevrildi’S yönlendiriciye özel IP adresi’benzersiz bir bağlantı noktasına sahip genel IP – daha sonra bir NAT tablosunda saklanır. Bu şekilde, yerel bir ağdaki her cihaz için benzersiz bir genel IP’ye sahip olmak gerekli değildir.
Yukarıdaki resim, bir NAT tablosunun neye benzeyeceğinin basit bir örneğidir. İzin vermek’özel bir IP ile yerel cihazı taklit etmek 192.168.1.50, Kamu adresini ister 82.88.31.26:80 bazı veriler için.
Bu, isteği ilk olarak isteği uzak cihaza yönlendiren yönlendiriciye gönderilen yerel cihaz tarafından gerçekleştirilir. Yönlendirici daha sonra uzak cihaza, bu örnekte olan benzersiz bir bağlantı noktasıyla yanıtı harici IP adresine göndermesini söyler 86.88.71.25: 8830.
Bu benzersiz bağlantı noktası, yönlendiricinin hangi yerel cihazın isteği yaptığını belirlemesine izin vereceği için önemlidir. Tüm bu bilgiler bir NAT tablosunda saklanır. Yönlendirici yanıtı aldıktan sonra, bir arama yapabilir ve yanıtın hangi yerel cihaza iletilmesi gerektiğine karar verebilir.
Normal bir istek/yanıt çiftimiz olduğunda bunu anlamak oldukça basittir – bir cihaz ve bir sunucu. Ancak, tamamen farklı bir IP adresine sahip başka bir harici cihaz, daha önce kullanılan aynı bağlantı noktasındaki yönlendiricinin harici IP adresine paket göndermeye karar verirse ne olur? Yönlendirici, o bağlantı noktası numarasıyla eşlenmiş yerel cihaza iletmeli mi??
Bu karar, yönlendiricinin hangi NAT çevirisini kullandığına bağlıdır ve sonuçta eşler arası bir bağlantının kurulup kurulamayacağını belirler. Kullandığınız yönlendiriciye bağlı olarak, farklı bir NAT çevirisi uygulayacak. Dört farklı NAT çeviri yöntemi vardır:
- Bire bir nat
- Adres Kısıtlı NAT
- Liman kısıtlı nat
- Simetrik nat
Bire bir nat: Bir harici IP adresi ve bağlantı noktası (genellikle genel) bir dahili IP adresi ve bağlantı noktasıyla (genellikle özel) eşler. Yukarıdaki örnekte, yönlendirici bağlantı noktasında bir yanıt alırsa 8830 ve harici IP 86.88.71.25, Yerel cihaza iletecek 192.168.1.50, Bu isteği yapan yerel cihaz olduğu için (NAT tablosundan alınan bilgiler). Yönlendirici, hedef IP’yi veya yanıtın kaynaklandığı yerleri umursamıyor. Eğer o’belirli bir harici bağlantı noktasında o yerel cihaza gider.
Adres Kısıtlı NAT: Uzak bir cihaz, yerel cihaza yalnızca yerel aygıt daha önce uzak IP adresine bir paket göndermişse bir paket gönderebilir. Özetle, ancak daha önce bu ana bilgisayarla iletişim kurarsak izin veririz. Yukarıdaki örnekte, yalnızca paketlere izin verin 86.88.71.25.
Liman kısıtlı nat: Adres Kısıtlı NAT ile aynı, ancak kısıtlama da bağlantı noktası numaralarını içerir. Uzak cihaz, dahili aygıt daha önce IP adresi X ve P bağlantı noktasına bir paket göndermişse, dahili cihaza bir paket gönderebilir. Yukarıdaki örnekte, yalnızca 86.88.71.25 ve liman 80.
Simetrik nat: En kısıtlayıcı. Bunun için harici ip, harici liman, Hedef IP, Ve hedef liman Hepsinin NAT tablosunda bulunanlarla eşleşmesi gerekiyor. Bu, paketlerin yalnızca yerel bir cihazın belirli bir bağlantı noktasına gönderilebileceği anlamına gelir.
WebRTC simetrik NAT üzerinde çalışmıyor ve neden bir sersemletici sunucunun ne olduğunu anlamamız gerektiğini anlamamız için.
NAT (STUN) için oturum geçiş yardımcı programları
STUN, NAT aracılığıyla genel IP adresinizi/bağlantı noktasını size anlatmak ve yönlendiricinizdeki bir eşle doğrudan bağlantıyı önleyecek herhangi bir kısıtlamayı belirlemek için bir protokoldür. Stun Sunucusu, müşterilerin bir NAT’ın varlığını ve NAT türünü keşfetmesi ve NAT’ın harici IP adresini ve bağlantı noktası eşlemesini belirlemesi için bir mekanizmadır.
Bir sersemletme talebinin amacı, kamusal varlığınızı belirlemektir, böylece bu kamusal varlığın sizinle bağlantı kurabilmeleri için başka biriyle iletilebilir – bu iletişim sinyal olarak adlandırılır ve daha sonra daha sonra tartışacağız.
İçin çalışıyor bire bir, Adres Kısıtlı, Ve liman kısıtlı nat. Ama işe yaramıyor simetrik nat. Kamu bilgileriniz için stun sunucusunu talep ettiğinizde, özellikle istemci için bu iletişim çifti oluşturuldu. Simetrik NAT kullanarak başka bir akran dahil etmek mümkün değil – Yerel cihazın bağlantı noktası üzerindeki iletişim, sersemletici sunucuyla sınırlıdır.
Sersemletici sunucular hafif ve sürdürmek için ucuzdur. Ücretsiz olarak sorgulanabilen halka açık sersemletici sunucular var.
Aşağıdaki resim, stun ne zaman çalışır ve ne zaman eşler arası bir bağlantının oluşturulabileceğini gösterir.
Öte yandan, örneğin bir eşler arası bağlantı kurulamazsa, bir akran simetrik bir NAT’ın arkasında olduğunda-o zaman üçüncü adımdaki son bağlantıya izin verilmez. Başlangıç bağlantısı stun sunucusu ile kurulurken ve başka hiçbir akran bu bağlantı bilgilerini kullanamaz.
Doğrudan bağlantının kurulamayacağı gibi bir olayda, bir dönüş sunucusunu kullanmamız gerekir.
Nat’ın etrafındaki röleleri kullanarak geçiş (dönüş)
Turn, iki akran arasında doğrudan bir bağlantı kurulamadığında ağ trafiğini aktarmak için bir protokoldür. Örneğin, bir akran simetrik bir NAT’ın arkasındaysa, akranları arasındaki trafiği aktarmak için özel bir sunucu gereklidir. Bu durumda, bir Turn sunucusuyla bir bağlantı oluşturacak ve tüm eşlere sunucuya paket göndermelerini söylersiniz, bu da size iletilecektir.
Bu, ek yük ile birlikte gelir ve bir dönüş sunucusunun bakımı ve çalıştırılması pahalı olabilir.
Aşağıdaki resim, bir dönüş sunucusunun iki veya daha fazla akran arasındaki iletileri aktarmak için nasıl kullanıldığını göstermektedir.
Etkileşimli Bağlantı Kuruluşu (ICE)
ICE, konakçıların birbirlerinin genel IP adreslerini keşfetmesi ve doğrudan bir bağlantı kurması için bir mekanizma sağlamak için stun ve dönüş protokollerinin bir kombinasyonunu kullanır. Doğrudan bir bağlantı imkansızsa, ICE, iki ana bilgisayar arasında bir röle bağlantısı kurmak için dönüşü kullanacaktır.
Potansiyel olarak bir bağlantı kurmanın tüm bu olası yollarına Buz Adayları denir. Toplanan tüm adresler, SDP aracılığıyla uzak akranlara gönderilir, bu da bir sonraki adımda keşfedeceğiz. WebRTC, başka bir eşe bağlanmanın en iyi yolunu belirlemek için her istemci için bu bilgileri kullanır. Her iki akran da aynı NAT’da ve yerel bir bağlantı kurulabilir veya her iki akran da simetrik NAT’ın arkasında olabilir ve bir dönüş sunucusu kullanarak bir röle gerektirebilir.
Oturum Açıklama Protokolü (SDP)
SDP aslında oturum duyurusu, oturum davetiyesi ve diğer oturum başlatma biçimleri için medya oturumlarını tanımlamak için bir veri biçimidir. Çözünürlük, formatlar, kodekler ve şifreleme gibi bağlantı için multimedya içeriğini tanımlamak için bir standarttır.
Daha da önemlisi,’S ayrıca buz adaylarını ve diğer ağ seçeneklerini tanımlamak için kullanılır. Akran A akranına bağlanmak istediğinde, bağlanmak için SDP bilgilerini paylaşmaları gerekir. Bu SDP’nin nasıl paylaşıldığı tamamen işliyor – buna sinyal olarak adlandırılıyor ve bunu bir sonraki keşfedeceğiz.
Sinyalizasyon – Bir bağlantı kurma
Sinyalleme, iletişim protokollerini, kanalları, medya kodeklerini ve formatlarını ve veri aktarım yöntemini ve gerekli yönlendirme bilgilerini belirlemek için iki cihaz arasında kontrol bilgileri gönderme işlemidir. WebRTC için sinyalleme süreci hakkında bilinmesi gereken en önemli şey: Spesifikasyonda tanımlanmamıştır.
Akran bağlantıları, iki uygulamayı farklı bilgisayarlara bağlamakla ilgilidir. Sinyalleme adı verilen bir keşif ve müzakere süreci ile bir bağlantı kurulur.
Önemli bir uyarı, WebRTC’nin spesifikasyonun bir parçası olarak yerleşik sinyallere sahip olmamasıdır, çünkü iki cihazın daha önce ayrıntılı olarak araştırdığımız birbirleriyle doğrudan iletişime geçmesi mümkün değildir. İki akranın WebRTC’yi kullanarak bağlanması için birbirlerinin SDP verilerini gerektirirler.
Bu nedenle, geliştirici olarak, iki cihazın bu bilgileri paylaşması için bir yol oluşturmak size kalmış. Popüler bir seçenek WebSockets’tir veya sinyal bilgileri e -posta üzerinden ileri geri gönderilebilir veya yürüyerek teslim edilebilir ve bir bağlantı kurmak için manuel olarak girilebilir.
Bu bilgiler paylaşıldıktan sonra, bir WebRTC bağlantısı kurmak için iki eş için ihtiyacınız olan her şeye sahipsiniz, doğrudan bir bağlantı olabilir veya bir dönüş sunucusu aracılığıyla olabilir.
Webrtc’yi ne zaman kullanmalısınız?
Hatta sorabilirsiniz: neden webrtc kullanmalıyım? Anlamak karmaşık ve daha da karmaşık görünüyor.
Kurulmak karmaşıktır, ancak birçok fayda vardır:
- API’nin kullanımı kolaydır ve doğrudan tarayıcınızda mevcuttur.
- Video veya ses gibi yüksek bant genişliği içeriğinin iletilmesini mümkün kılan iyi bir performansa sahiptir.
- Ekran paylaşımı ve dosya paylaşımı gibi daha gelişmiş özellikler kolayca uygulanabilir.
- Azaltılmış gecikme ile eşler arası bağlantıyı destekler.
- Ücretsiz ve açık kaynak.
- Yerleşik sinyal yok.
- Sersemlemeyi ve Sunucuları Döndürmeniz Gerekiyor.
- Grup bağlantıları için (grup görüntülü görüşmesi gibi) bir SFU gerekebilir.
- Kurmak ve anlamak için karmaşık.
Hangisini seçmelisin?
Seçtiğiniz protokol özel ihtiyaçlarınıza bağlı olacaktır.
HTTP: HTTP/2 ile, bir istemci ve sunucu arasında çift yönlü iletişim kurmak artık mümkündür. Uygulamanıza bağlı olarak tam dubleks iletişime ihtiyacınız olmayabilir ve SSE gibi bir şey fazlasıyla yeterli olacaktır. Bu makalede, WebSockets ve GRPC’nin HTTP’ye bağımlı olduğunu, WebRTC’nin sinyalizasyon için başka bir kanal gerektirdiğini keşfettik. BT’S Bu diğer protokollere girmeden önce HTTP’nin uygulama ihtiyaçlarınızı çözüp çözmediğini keşfetmeye değer.
WebSockets Sohbet uygulamaları gibi iki yönlü iletişime ihtiyaç duyan gerçek zamanlı uygulamalar için en uygun olan. Ayrıca kurulması ve kullanımı nispeten kolaydır. Bununla birlikte, WebSockets GRPC veya WebRTC kadar verimli değildir ve çok fazla veri göndermesi gereken uygulamalar için çok uygun değildir.
GRPC WebSockets’ten daha verimli bir protokoldür ve çok fazla veri göndermesi gereken uygulamalar için daha uygundur. Ancak, GRPC’nin kurulması ve kullanılması WebSockets’ten daha karmaşıktır. Birçok küçük API çağrısı yapmanız gerekiyorsa, GRPC iyi bir seçimdir. Veya, iletişim kurması gereken çeşitli programlama dillerine sahip mikro hizmetler uyguladığınızda GRPC’S serileştirilmiş yapılandırılmış veriler ve kod oluşturma size çok zaman kazandıracak. BT’Ayrıca yapabileceğinizi de belirlemeye değer’T Tarayıcıdan GRPC’yi kolayca kullanın. Bunun için, arka ucunuzda çağrıları çeviren özel bir proxy’ye ihtiyacınız var – bkz. GRPC -WEB.
Webrtc tarayıcılar ve cihazlar arasındaki düşük gecikme ile gerçek zamanlı iletişim için en etkili protokoldür ve çok fazla veri göndermesi gereken uygulamalar için çok uygundur. WebRTC ayrıca, doğrudan tarayıcıda kullanılabilir kullanımı kolay bir API sağlar ve kameranızı, ses, ekranınızı veya diğer dosyalarınızı paylaşmanızı kolaylaştırır. Bununla birlikte, WebRTC, sinyali gerçekleştirmenizi ve bir dönüş ve sersemletici sunucuyu korumanızı gerektirdiği için kurmak ve kullanmak için karmaşık olabilir.
Çözüm
Gelecek, daha fazla protokol, değişiklik ve daha fazla iyileştirme görecek. HTTP/3 zaten piyasaya sürüldü ve Webtransport adlı yeni bir iletişim protokolü de var, WebSockets için potansiyel bir yedek.
Umarız bu makaleyi yararlı bulmuş ve bilinçli bir karar vermenize yardımcı olacaktır. Tartışmaya devam etmek istiyorsanız, Twitter veya LinkedIn’de bize ulaşın.
WebRTC vs HLS: Akış protokolleri arasındaki karşılaştırma
Bu blog yazısı, en popüler akış protokollerinden ikisi olan WebRTC ve HLS’yi karşılaştırıyor. Her protokolün artılarını ve eksilerini inceler ve uygulamalarını araştırır. Ayrıca, yayın, okuyucuların ihtiyaçları için doğru teknolojiyi seçmelerini sağlayan akış için daha iyi bir genel bakış sağlar.
Ashik ts
22 Şubat 2023
Günümüzün dijital çağında, akış protokolleri medyayı tüketmek ve paylaşmak için gerekli hale geldi. Canlı akışlardan talep üzerine videoya kadar, akış protokolleri içeriğe her yerde, istediğiniz zaman erişmemizi sağladı. Ancak mevcut birçok seçenekle, ihtiyaçlarınız için en iyi olduğunu bilmek zaman ve çaba gerektirebilir. Bu makalede, en popüler akış protokollerinden ikisine bakacağız: WebRTC ve HLS, bunları karşılaştıracağız ve bilinçli bir karar vermenize yardımcı olacağız.
Webrtc nedir?
WebRTC, W3C tarafından geliştirilen ücretsiz ve açık kaynaklı bir protokoldür. Ses ve video görüşmeleri, çevrimiçi konferans ve sohbet gibi gerçek zamanlı iletişim sağlar. WebRTC, düşük gecikmeli, yüksek kaliteli video ve ses akışları sunma yeteneği nedeniyle son zamanlarda öne çıktı.
Webrtc uygulamaları
İşte en sık kullanılan WebRTC kullanım durumlarından bazıları:
- Ses ve video görüşmeleri: WebRTC için en popüler kullanım durumlarından biri ses ve video görüşmeleridir. İki veya daha fazla kişi arasında gerçek zamanlı, düşük gecikme iletişimi sağlar. İşletmeler bu özelliği, sosyal ağ ve çevrimiçi randevu için dahili iletişim, işbirliği ve tüketiciye dönük uygulamalar için yaygın olarak kullanıyor.
- Çevrimiçi Konferans: WebRTC için bir başka popüler kullanım durumu çevrimiçi konferans. Birden fazla kullanıcının sanal bir toplantı odasına katılmasını ve video ve ses yoluyla birbirleriyle etkileşime girmesini, ekranları ve belgeleri paylaşmasını sağlar. İşletmeler, bu özelliği uzak toplantılar ve sunumlar için ve çevrimiçi dersler ve dersler için eğitim kurumları tarafından yaygın olarak kullanıyor.
- Sohbet: WebRTC ayrıca sohbet yoluyla gerçek zamanlı metin tabanlı iletişimi sağlar. Bu özellik, sosyal ağ, çevrimiçi oyun ve müşteri desteği gibi çeşitli uygulamalara ve platformlara entegre edilebilir. Anında iletişim sağlar ve çeşitli bağlamlarda kullanıcı deneyimini geliştirmek için kullanılabilir.
HLS nedir?
HLS (HTTP Canlı Akış), Apple tarafından geliştirilen uyarlanabilir bir bit hızı akışı protokolüdür. Mobil cihazlarda ve masaüstü tarayıcılarında canlı akış için yaygın olarak kullanılır. HLS, HTTP protokolü ile çalışmak üzere tasarlanmıştır ve mevcut HTTP tabanlı altyapıya kolayca entegre edilebilir.
HLS uygulamaları
İşte HLS’nin bugünün gününde ve yaşında kullanıldığı daha yaygın yollardan bazıları:
- Canlı yayın: HLS, spor, konserler ve haber yayınları gibi canlı akış etkinlikleri için yaygın olarak kullanılmaktadır. Protokol, yüksek trafiği ele almak ve izleyiciler için sorunsuz bir akış deneyimi sağlamak için tasarlanmıştır. Uyarlanabilir Bitrate özelliği, akışın izleyicinin İnternet bağlantısına ayarlanmasını sağlar ve daha iyi bir izleme deneyimi sağlar.
- İsteğe bağlı video (VOD): HLS, filmler, TV şovları ve video öğreticileri gibi isteğe bağlı video (VOD) içeriği için de yaygın olarak kullanılır. Protokol, içerik yönetimi sistemleriyle kolay entegrasyon ve uyarlanabilir bit hızı ile izleyici için sorunsuz bir akış deneyimi sağlar.
- IPTV ve OTT: HLS ayrıca televizyon ve video hizmetleri akışı gibi IPTV ve üst düzey (OTT) hizmetlerinde de kullanılır. Protokolün yüksek trafiği ele alma ve sorunsuz bir akış deneyimi sağlama yeteneği, bu uygulamalar için popüler bir seçim haline getiriyor.
- Mobil Akış: HLS, hem iOS hem de Android platformlarında desteklendiği için mobil akış için de popülerdir.
- Kurumsal İletişim: HLS, çalışanların video yayınlamasına, ekranları paylaşmasına ve sorunsuz bir akış deneyimi sağladığı ve çoğu cihazla uyumlu olduğu için ses/görüntülü görüşmeler yapmasına izin veren kurumsal iletişim platformlarında kullanılır.
WebRTC vs HLS: Ayrıntılı bir karşılaştırma
Özellik | Webrtc | HLS |
---|---|---|
Tarayıcı desteği | Chrome, Firefox, Safari, Edge (bir eklenti ile) | Safari, Chrome, Edge, Firefox (bir eklenti ile) |
Cihaz desteği | Windows, MacOS, Linux, iOS, Android | iOS, Android, macOS, Windows |
Codec desteği | VP8, VP9, H.264, h.265 | H.264, h.265 |
Gecikme | Düşük | Yüksek |
Güvenlik | Yüksek | Orta |
Video kalitesi | Yüksek | Yüksek |
Teslimat Yöntemi | Eşler arası | Sunucu tabanlı |
Ölçeklenebilirlik | Yüksek | Yüksek |
Uyumluluk | Sınırlı | Geniş |
Hangi protokolü kullanacağına karar verirken, gecikme, güvenlik, video kalitesi, teslimat yöntemi, ölçeklenebilirlik ve uyumluluk gibi faktörleri dikkate almak önemlidir.
Gecikme
Gecikme söz konusu olduğunda, WebRTC’nin HLS’ye göre açık bir avantajı var. WebRTC gerçek zamanlı iletişim kullanıyor, yani video anında izleyiciye teslim ediliyor. Öte yandan, HLS, video teslimatını geciktiren bir tamponlama mekanizması kullanır. Ağ koşullarına bağlı olarak, bu gecikme birkaç saniyeden birkaç dakikaya kadar herhangi bir yerde olabilir. Bu öğeler, WebRTC’yi canlı görüntülü sohbetler ve çevrimiçi oyunlar gibi düşük gecikme gerektiren kullanım durumları için daha uygun hale getirir.
Güvenlik
Hem WebRTC hem de HLS, video akışlarını güvence altına almak için şifreleme kullanıyor. Ancak, her protokol tarafından sağlanan güvenlik seviyesi farklıdır. WebRTC, en güvenli şifreleme yöntemlerinden biri olarak kabul edilen video akışını şifrelemek için güvenli gerçek zamanlı taşıma protokolünü (SRTP) kullanır. Öte yandan, HLS video akışını şifrelemek için HTTP Secure (HTTPS) protokolünü kullanır. HTTPS güvenli kabul edilirken, SRTP daha az güvenlidir. Bu nedenlerden dolayı, WebRTC, finansal işlemler ve hükümet iletişimi gibi yüksek güvenlik seviyeleri gerektiren kullanım durumları için daha uygundur.
Video kalitesi
Hem WebRTC hem de HLS, yüksek kaliteli video sunabilir. Ancak, her protokol tarafından sunulan video kalitesi, ağ koşullarına bağlı olarak değişebilir. WebRTC, görüntüleyicinin ağ koşullarına göre video kalitesini gerçek zamanlı olarak ayarlayan uyarlanabilir bit hızı akışı kullanır. Bu, düşük bant genişliğinde ağlarda bile video kalitesinin yüksek olacağı anlamına gelir. Öte yandan, HLS, düşük bant genişliğinde ağlarda tamponlama ve kekemelerine yol açabilecek önceden bölümlenmiş bir video dağıtım mekanizması kullanır. Sonuç olarak, WebRTC, düşük bant genişliğinde ağlarda yüksek kaliteli video gerektiren kullanım durumları için daha uygundur.
Teslimat Yöntemi
WebRTC ve HLS, video yayınlamak için farklı dağıtım yöntemlerini kullanır. WebRTC, eşler arası (P2P) bir teslimat yöntemi kullanır, bu da videonun doğrudan bir görüntüleyiciden diğerine teslim edildiği anlamına gelir. Bu, sunucu yükünü azaltır ve video akışının ölçeklenebilirliğini artırır. Öte yandan, HLS bir istemci-sunucu dağıtım yöntemi kullanır, bu da videonun sunucudan görüntüleyiciye teslim edildiği anlamına gelir. Bu, özellikle en yoğun trafik sürelerinde ölçeklenebilirlik sorunlarına yol açabilir. Sonuç olarak, WebRTC, canlı etkinlikler ve çevrimiçi oyunlar gibi yüksek tutarlılıklar gerektiren kullanım durumları için daha uygundur.
Ölçeklenebilirlik
WebRTC ve HLS farklı ölçeklenebilirlik özelliklerine sahiptir. WebRTC, sunucunun yükünü azaltan ve video akışının ölçeklenebilirliğini artıran bir P2P dağıtım yöntemi kullanır. Öte yandan, HLS, özellikle pik trafik sürelerinde ölçeklenebilirlik sorunlarına yol açabilecek bir istemci-sunucu dağıtım yöntemi kullanır. Sonuç olarak, WebRTC, canlı etkinlikler ve çevrimiçi oyunlar gibi yüksek tutarlılıklar gerektiren kullanım durumları için daha uygundur.
Uyumluluk
WebRTC ve HLS farklı uyumluluk özelliklerine sahiptir. WebRTC, Chrome, Firefox ve Safari dahil olmak üzere çoğu modern tarayıcı ile uyumludur. Ancak, Internet Explorer ve Edge ile uyumlu değildir. Öte yandan, HLS, Chrome, Firefox, Safari, Internet Explorer ve Edge dahil olmak üzere çoğu modern tarayıcı ile uyumludur. Bu nedenle, HLS çok çeşitli tarayıcı ve cihazlarla uyumluluk gerektiren kullanım durumları için daha uygundur.
Webrtc vs HLS: Hangisi daha iyi?
Webrtc düşük gecikme, gerçek zamanlı akış uygulamaları için mükemmel bir seçenektir. Ses ve video görüşmeleri, çevrimiçi konferans ve sohbet gibi kullanım durumları için mükemmeldir. Diğer taraftan, HLS geniş bir kitleye canlı video yayınlamak için mükemmel bir seçenek. Özellikle canlı sporlar, konserler ve yüksek ölçeklenebilirlik gerektiren diğer etkinlikler gibi kullanım durumları için çok uygundur. HLS’nin farklı ağ koşullarına uyum sağlama yeteneği, çeşitli cihazlarda ve ağlardaki izleyicilere içerik yayınlamak için popüler bir seçim haline getiriyor.
Buna ek olarak, HLS, içeriğin telif hakkını korumak için daha iyi desteğe sahiptir ve bu da premium içerik akışı için tercih edilen bir seçimdir. Uyumluluk söz konusu olduğunda, HLS’nin WebRTC’ye göre hafif bir kenarı vardır. HLS yaygın olarak desteklenmektedir, bu da daha geniş bir kitleye içerik akışı yapmak için daha çok yönlü bir seçenek haline getirilir. Ancak, bu biraz daha yüksek gecikme pahasına gelir.
Ana odağınız gerçek zamanlı, düşük gecikmeli akışsa, WebRTC daha iyi opsiyonunuz olabilir. Aksi takdirde, ana odağınız ölçeklenebilirlik ve uyumluluk üzerindeyse, HLS daha iyi seçim olabilir.
Çözüm
Sonuç olarak, hem WebRTC hem de HLS’nin farklı akış türleri için uygun hale getiren kendi benzersiz özellikleri ve kullanım durumları vardır. WebRTC, ses ve video görüşmeleri, çevrimiçi konferans ve sohbet gibi düşük gecikme, gerçek zamanlı iletişim için en uygun olanıdır. Öte yandan, HLS, çok çeşitli cihazlarda önceden kaydedilmiş videoların yüksek kaliteli akışı için en uygun olanıdır.
SSS
1. Webrtc TCP veya UDP kullanıyor mu?
WebRTC, iletilen veri türüne bağlı olarak hem TCP hem de UDP kullanır. Mesajları kontrol etmek için TCP ve medya akışı için UDP kullanır.
2. YouTube HLS kullanıyor mu?
Evet, YouTube, izleyicilere video sunmak için akış protokollerinden biri olarak HLS (HTTP Canlı Akışı) kullanıyor.
3. Sadece tarayıcılar için webrtc?
WebRTC öncelikle tarayıcı tabanlı bir teknolojidir, ancak yerel uygulamalarda WebRTC kitaplıkları aracılığıyla da kullanılabilir.
4. Netflix Webrtc kullanıyor mu?
Hayır, Netflix akış için webrtc kullanmıyor. HTTP Canlı Akışına (HLS) dayanan HTTP (ASOH) üzerinden uyarlanabilir akış adı verilen kendi özel teknolojilerini kullanıyorlar.