Czy WebRTC używa HTTP
Otwarcie nowego połączenia TCP dla każdego żądania stało się problemem w miarę ewolucji sieci. Zaczęliśmy budować pełne aplikacje zamiast prostych stron internetowych, a liczba mediów i plików, którą przeglądarka potrzebna do odzyskania stała się więcej. Wyobraź sobie typową aplikację internetową, która wymaga pliku HTML, CSS i JavaScript, a także różnych obrazów i innych zasobów. Dla każdego pliku trzeba było nawiązać nowe połączenie.
WEBRTC vs HTTP Streaming
Возожно, ареса электроннy почты являюczeń анонимныи для этой групыы и POŁĄCZ вам т н н на н на н н н на н н н на н н н на н н нат н нат н н на н нат н на н на н на н н н на нат н н н н н н н н н н н н н н н н н н н н н н н н н н ектроной почты е частников, чтобы увидеть исходное собщениеS.
-Dyskutuj-WEBRTC
Eksperymentuję z protokołami strumieniowego WEBRTC i HTTP (HLS, MPEG-DASH) w celu przesyłania strumieniowego wideo na żywo od kilku dni i odkryłem, że chociaż WebRTC osiąga opóźnienia pod drugim, protokoły przesyłania strumieniowego HTTP zawsze mają wielo-sekundowe opóźnienia. Dlatego mam kilka pytań związanych z WEBRTC vs HTTP Streaming.
1. W jaki sposób WebRTC jest w stanie osiągnąć pod drugie opóźnienia w porównaniu z protokołami strumieniowego strumieniowego HTTP?
WEBRTC jest w stanie osiągnąć pod drugie opóźnienia w porównaniu z protokołami strumieniowego strumieniowego HTTP ze względu na możliwości komunikacji w czasie rzeczywistym (RTC). WEBRTC jest zbudowany w celu zapewnienia aplikacji natychmiastowej transmisji wideo, audio i innych danych między rówieśnikami. Umożliwia to praktycznie natychmiastową transmisję treści, co skutkuje opóźnieniami poniżej drugiej.
2. Jeśli WebRTC zapewnia już strumieniowanie wideo o niskiej opóźnieniu, dlaczego istnieje wysiłek zjednoczenia protokołów strumieniowego strumieniowego HTTP zgodnie z standardem MPEG-DASH?
Wysiłek zjednoczenia protokołów strumieniowych HTTP w ramach standardu MPEG-DASH jest napędzany potrzebą znormalizowanego podejścia do strumieniowego przesyłania HTTP. Chociaż WebRTC zapewnia strumieniowanie wideo o niskiej opóźnieniu, nie jest on odpowiednie dla wszystkich przypadków użycia i może nie być kompatybilny ze wszystkimi urządzeniami i oprogramowaniem. Ujednolicając protokoły przesyłania strumieniowego HTTP w ramach standardu MPEG-DASH, dostawcy treści łatwiej jest dostarczać wysokiej jakości przesyłanie strumieniowe wideo na różnych platformach i urządzeniach, zapewniając spójne przeglądanie użytkowników.
3. Jak WEBRTC porównuje z RTMP? (Do tej pory nie badałem RTMP, ale chcę wiedzieć, czy można osiągnąć opóźnienia podrzędne z RTMP)
Zarówno WebRTC, jak i RTMP są protokołami używanymi do przesyłania strumieniowego mediów, ale mają pewne różnice pod względem opóźnień i kompatybilności. WEBRTC jest przeznaczony do komunikacji w czasie rzeczywistym i może osiągnąć opóźnienia podsekondowe, co czyni go odpowiednim do aplikacji wymagających natychmiastowej transmisji. Z drugiej strony RTMP (protokół wiadomości w czasie rzeczywistym) jest protokołem używanym przede wszystkim do przesyłania strumieniowego dźwięku, wideo i danych między enkoderem a serwerem streamingowym. Podczas gdy RTMP może zapewnić transmisję strumieniową o niskiej opóźnieniu, osiągnięcie opóźnień podsekondowych może zależeć od różnych czynników, takich jak warunki sieciowe i konfiguracje serwerów.
Badanie porównawcze między strumieniowaniem WEBRTC i HTTP
Od dłuższego czasu obniżenie opóźnienia strumieniowego było popularnym tematem. Wiadomo, że opóźnienia dziesiątek sekund, a nawet jednej minuty, w przeszłości występują w przypadku strumieniowania opartego na HTTP. Z tradycyjnym opóźnieniem transmisji w sekundach jednocyfrowych i pojawiających się rozwiązań, takich jak Usługi rozwoju WebRTC, Pytanie brzmi, które podejście należy podjąć. Streaming WebRTC jest w stanie dostarczać wideo nie tylko w podsekonach, ale w mniej niż 500 milisekundach. Jest to obecnie dostępna technologia przesyłania strumieniowego o najniższym opóźnieniu, umożliwiającą praktycznie natychmiastową transmisję.
W tym fajnym przewodniku przyjrzymy się, jak działa WebRTC i porównamy go z HTTP z perspektywy Usługa przesyłania strumieniowego wideo. Zacznijmy!
Szybkie podsumowanie strumieniowego strumieniowego i WEBRTC opartego na HTTP
Protokoły oparte na HTTP to technicznie regularne serwery internetowe wysyłające progresywne pobieranie. Używają adaptacyjnego transmisji transmisji transmisji transmisji transmisji transmisji, aby zapewnić najwyższą możliwą jakość wideo i oglądanie, niezależnie od połączenia, oprogramowania lub urządzenia. Niektóre z najczęstszych dostępnych protokołów opartych na HTTP obejmują MPEG-Dash, Apple’S HLS, Adobe HDS i Microsoft Smoothing Streaming.
WebRTC to solidny protokół, który jest wspierany przez doskonałe narzędzia i szerokie wsparcie branżowe. Został utworzony w celu zapewnienia aplikacji możliwości komunikacji w czasie rzeczywistym (RTC), umożliwiając przesyłanie wideo, audio lub dowolnego innego rodzaju danych. Jest to kluczowe rozróżnienie między nimi w porównaniu z strumieniowaniem opartym na HTTP, które jest zorientowane na klienta-serwer.
UDP vs. TCP
Podstawowe komponenty internetowe Suite Protocol Suite, User Datagram Protocol (UDP) i protokół sterowania transmisją (TCP), oba znajdują się na warstwie transportowej.
Głównym rozróżnieniem między UDP i TCP polega na tym, że TCP wymaga trójstronnego uścisku dłoni podczas przesyłania danych. Inicjator (klient) żąda, aby akceptor (serwer) ustanowił połączenie, odpowiada akceptor, a inicjator potwierdza odpowiedź i utrzymuje sesję między dwoma końcami. Dlatego TCP jest niezwykle wiarygodne i może poradzić sobie z utratą pakietu i zamawianiem.
Z drugiej strony UDP’t Wymagaj uścisku dłoni na rozpoczęcie. Przenosi dane niezależnie od ograniczeń przepustowości, co czyni je zarówno szybszym, jak i bardziej ryzykownym. Ponieważ UDP nie obsługuje retransmisji, zamawiania pakietów lub sprawdzania błędów, czkawka sieciowa może potencjalnie zanieczyścić dane w tranzycie.
Protokoły takie jak WebRTC często używają UDP, podczas gdy protokoły oparte na HTTP używają TCP.
Jak unosi się WEBRTC w porównaniu do strumieniowego przesyłania strumieniowego HTTP?
- Jakiego rodzaju opóźnienia szukasz?
- Jaki będzie wielkość publiczności?
- Jaka jest maksymalna kwota, którą chcesz wydać?
Czas oczekiwania
Odpowiedzi na pytania dotyczące opóźnień zależą od zakresu opóźnień, do którego dążysz.
Nowe i ulepszone HL, takie jak LL-HLS i LL-DASH, ma 3-sekundowe lub mniejsze opóźnienie. Jest to nadal uważane za szybkie i wystarczy dla większości przypadków użycia o niskiej opóźnieniu. WEBRTC, z drugiej strony, pozostaje najszybszym rozwiązaniem, jeśli Twój przypadek użycia wymaga przesyłania strumieniowego w czasie rzeczywistym. Ponieważ jest to protokół UDP opracowany w celu w pełni dostosowywania się do nowoczesnego Internetu. Obsługuje 500 ms opóźnienia w czasie rzeczywistym.
WEBRTC został zaprojektowany w celu zapewnienia dwukierunkowej komunikacji w czasie rzeczywistym. W przeciwieństwie do HLS, oparty na TCP, WebRTC opiera się na UDP. Oznacza to, że WebRTC może zacząć bez wymiany klienta i serwera. W rezultacie WebRTC jest szybszy, ale sprawia, że jest bardziej podatny na fluktuacje sieciowe.
WebRTC jest protokołem do zastosowania, jeśli rozwiązanie wymaga peer-to-peer, strumieniowania w czasie rzeczywistym. Jeśli jednak chcesz rozwinąć odbiorców powyżej 50 osób, musisz ponownie rozważyć swoją strategię.
W porównaniu z HLS skalowanie WebRTC jest znacznie trudniejsze. Można to jednak rozwiązać za pomocą hybrydowego przepływu pracy. Twój wybór zostanie określony przez Twój przypadek użycia i rozmiar odbiorców docelowych.
Jeśli chodzi o dotarcie do ogromnej publiczności, protokoły oparte na HTTP pojawiają się na górze.
Czy WebRTC używa HTTP
Otwarcie nowego połączenia TCP dla każdego żądania stało się problemem w miarę ewolucji sieci. Zaczęliśmy budować pełne aplikacje zamiast prostych stron internetowych, a liczba mediów i plików, którą przeglądarka potrzebna do odzyskania stała się więcej. Wyobraź sobie typową aplikację internetową, która wymaga pliku HTML, CSS i JavaScript, a także różnych obrazów i innych zasobów. Dla każdego pliku trzeba było nawiązać nowe połączenie.
WEBRTC vs HTTP Streaming
Возожно, ареса электроннy почты являюczeń анонимныи для этой групыы и POŁĄCZ вам т н н на н на н н н на н н н на н н н на н н нат н нат н н на н нат н на н на н на н н н на нат н н н н н н н н н н н н н н н н н н н н н н н н н н ектроной почты е частников, чтобы увидеть исходное собщениеS.
-Dyskutuj-WEBRTC
Eksperymentuję z protokołami strumieniowego WEBRTC i HTTP (HLS, MPEG-DASH) w celu przesyłania strumieniowego wideo na żywo od kilku dni i odkryłem, że chociaż WebRTC osiąga opóźnienia pod drugim, protokoły przesyłania strumieniowego HTTP zawsze mają wielo-sekundowe opóźnienia. Dlatego mam kilka pytań związanych z WEBRTC vs HTTP Streaming.
1. W jaki sposób WebRTC jest w stanie osiągnąć pod drugie opóźnienia w porównaniu z protokołami strumieniowego strumieniowego HTTP?
2. Jeśli WebRTC zapewnia już strumieniowanie wideo o niskiej opóźnieniu, dlaczego istnieje wysiłek zjednoczenia protokołów strumieniowego strumieniowego HTTP zgodnie z standardem MPEG-DASH?
3. Jak WEBRTC porównuje z RTMP? (Do tej pory nie badałem RTMP, ale chcę wiedzieć, czy można osiągnąć opóźnienia podrzędne z RTMP)
Badanie porównawcze między strumieniowaniem WEBRTC i HTTP
Od dłuższego czasu obniżenie opóźnienia strumieniowego było popularnym tematem. Wiadomo, że opóźnienia dziesiątek sekund, a nawet jednej minuty, w przeszłości występują w przypadku strumieniowania opartego na HTTP. Z tradycyjnym opóźnieniem transmisji w sekundach jednocyfrowych i pojawiających się rozwiązań, takich jak Usługi rozwoju WebRTC , Pytanie brzmi, które podejście należy podjąć. Streaming WebRTC jest w stanie dostarczać wideo nie tylko w podsekonach, ale w mniej niż 500 milisekundach. Jest to obecnie dostępna technologia przesyłania strumieniowego o najniższym opóźnieniu, umożliwiającą praktycznie natychmiastową transmisję.
W tym fajnym przewodniku przyjrzymy się, jak działa WebRTC i porównamy go z HTTP z perspektywy Usługa przesyłania strumieniowego wideo . Zacznijmy!
Szybkie podsumowanie strumieniowego strumieniowego i WEBRTC opartego na HTTP
Protokoły oparte na HTTP to technicznie regularne serwery internetowe wysyłające progresywne pobieranie. Używają adaptacyjnego transmisji transmisji transmisji transmisji transmisji transmisji, aby zapewnić najwyższą możliwą jakość wideo i oglądanie, niezależnie od połączenia, oprogramowania lub urządzenia. Niektóre z najczęstszych dostępnych protokołów opartych na HTTP obejmują MPEG-Dash, Apple’S HLS, Adobe HDS i Microsoft Smoothing Streaming.
WebRTC to solidny protokół, który jest wspierany przez doskonałe narzędzia i szerokie wsparcie branżowe. Został utworzony w celu zapewnienia aplikacji możliwości komunikacji w czasie rzeczywistym (RTC), umożliwiając przesyłanie wideo, audio lub dowolnego innego rodzaju danych. Jest to kluczowe rozróżnienie między nimi w porównaniu z strumieniowaniem opartym na HTTP, które jest zorientowane na klienta-serwer.
UDP vs. TCP
Podstawowe komponenty internetowe Suite Protocol Suite, User Datagram Protocol (UDP) i protokół sterowania transmisją (TCP), oba znajdują się na warstwie transportowej.
Głównym rozróżnieniem między UDP i TCP polega na tym, że TCP wymaga trójstronnego uścisku dłoni podczas przesyłania danych. Inicjator (klient) żąda, aby akceptor (serwer) ustanowił połączenie, odpowiada akceptor, a inicjator potwierdza odpowiedź i utrzymuje sesję między dwoma końcami. Dlatego TCP jest niezwykle wiarygodne i może poradzić sobie z utratą pakietu i zamawianiem.
Z drugiej strony UDP’t Wymagaj uścisku dłoni na rozpoczęcie. Przenosi dane niezależnie od ograniczeń przepustowości, co czyni je zarówno szybszym, jak i bardziej ryzykownym. Ponieważ UDP nie obsługuje retransmisji, zamawiania pakietów lub sprawdzania błędów, czkawka sieciowa może potencjalnie zanieczyścić dane w tranzycie.
Protokoły takie jak WebRTC często używają UDP, podczas gdy protokoły oparte na HTTP używają TCP.
Jak unosi się WEBRTC w porównaniu do strumieniowego przesyłania strumieniowego HTTP?
- Jakiego rodzaju opóźnienia szukasz?
- Jaki będzie wielkość publiczności?
- Jaka jest maksymalna kwota, którą chcesz wydać?
Czas oczekiwania
Odpowiedzi na pytania dotyczące opóźnień zależą od zakresu opóźnień, do którego dążysz.
Nowe i ulepszone HL, takie jak LL-HLS i LL-DASH, ma 3-sekundowe lub mniejsze opóźnienie. Jest to nadal uważane za szybkie i wystarczy dla większości przypadków użycia o niskiej opóźnieniu. WEBRTC, z drugiej strony, pozostaje najszybszym rozwiązaniem, jeśli Twój przypadek użycia wymaga przesyłania strumieniowego w czasie rzeczywistym. Ponieważ jest to protokół UDP opracowany w celu w pełni dostosowywania się do nowoczesnego Internetu. Obsługuje 500 ms opóźnienia w czasie rzeczywistym.
WEBRTC został zaprojektowany w celu zapewnienia dwukierunkowej komunikacji w czasie rzeczywistym. W przeciwieństwie do HLS, oparty na TCP, WebRTC opiera się na UDP. Oznacza to, że WebRTC może zacząć bez wymiany klienta i serwera. W rezultacie WebRTC jest szybszy, ale sprawia, że jest bardziej podatny na fluktuacje sieciowe.
WebRTC jest protokołem do zastosowania, jeśli rozwiązanie wymaga peer-to-peer, strumieniowania w czasie rzeczywistym. Jeśli jednak chcesz rozwinąć odbiorców powyżej 50 osób, musisz ponownie rozważyć swoją strategię.
W porównaniu z HLS skalowanie WebRTC jest znacznie trudniejsze. Można to jednak rozwiązać za pomocą hybrydowego przepływu pracy. Twój wybór zostanie określony przez Twój przypadek użycia i rozmiar odbiorców docelowych.
Jeśli chodzi o dotarcie do ogromnej publiczności, protokoły oparte na HTTP pojawiają się na górze. Chwila “CDN” W przypadku WEBRTC istnieje, że koszt jest często wygórowany.
Koszt
WEBRTC to bezpłatny i otwarty protokół. Ale pamiętaj, jak rozmawialiśmy o skalowaniu WebRTC? Jest to całkowicie możliwe i działa skutecznie w wielu przypadkach użycia – ale nie jest tani. Jeśli nie musisz przesyłać strumieniowo do setek ludzi, WEBRTC jest świetną opcją. Jeśli jednak chcesz dotrzeć do dużej publiczności, musisz wydać pieniądze na dodatkowe serwery, aby zmniejszyć ciężar w przeglądarce.
HLS jest prawdopodobnie najbardziej opłacalną metodą dostarczania wideo. Skalowanie za pomocą CDN jest łatwo uzasadnione z punktu widzenia kosztu, ponieważ wykorzystuje niedrogie infrastruktury HTTP i obecną technologię sieciową opartą na TCP.
Wniosek
W ciągu ostatnich kilku lat protokół oparty na HTTP i WebRTC przeszły długą drogę. Pomimo faktu, że oba są najnowocześniejszymi technologiami napędzającymi branżę, każda z nich ma swój własny zestaw zalet i wad. Żaden wybór nie jest idealny dla wszystkich, ale jeden z nich może być dla Ciebie najlepszy.
Ostatecznie optymalny protokół zostanie określony przez cechy twojego projektu, urządzenia, do których zostaną rozpowszechnione, oraz skali odbiorców. Opracowując rozwiązanie o niskiej opóźnieniu, pamiętaj o tych rzeczach.
Ciekawy znalezienia dla Ciebie najlepszego rozwiązania? Skontaktuj się z naszymi ekspertami od strumieniowania wideo na żywo!
HTTP, WebSocket, GRPC lub WebRTC: Który protokół komunikacji jest najlepszy dla Twojej aplikacji?
Aktywuj dziś 30-dniową bezpłatną próbę i rozpocznij prototypowanie.
- Zbuduj czat wideo
- Co to jest SFU
- Protokoły strumieniowe wideo
- P2P wideokonferencje
Udostępnij artykuł do:
Wybierając protokół komunikacyjny dla twoich aplikacji, istnieje wiele różnych opcji. W tym poście my’Spójrz na cztery popularne rozwiązania: Http, WebSocket, GRPC, I WEBRTC. Zbadamy każdy protokół, badając technologię za nim, co to’jest najlepiej użyty, a jego mocne i słabe strony.
· Opublikowano 26 września 2022
Nasze formy komunikacji stale się poprawiają: staje się szybsze, wygodniejsze i bardziej niezawodne. Nasza komunikacja ewoluowała od wysyłania wiadomości za pomocą gołębi przewoźników, po pocztę pocztową, do wynalezienia stacjonarnego, do wiadomości e -mail i wiadomości tekstowych z małego urządzenia, które pasuje do naszych kieszeni.
W przyszłości możemy nawet przejść spotkania i przyjęcia urodzinowe dla VR (mam nadzieję, że to tylko żart!). Ale najlepsza forma komunikacji zawsze zależy od sytuacji.
Szybka wiadomość tekstowa jest czasem lepsza niż długi e -mail. Innym razem połączenie wideo z zespołem jest najlepszym sposobem wymiany informacji. Natomiast ważne dokumenty ubezpieczeniowe muszą być wysyłane przez regularną pocztę i dostarczyć w formie papierowej.
To samo dotyczy również technologii i protokołów, których używamy. Różne aplikacje mają różne potrzeby komunikacyjne.
Przegląd
W tym artykule my’pokryć trochę popularnych Protokoły komunikacyjne Możemy wykorzystać jako programiści i badać zalety i wady różnych opcji. Żadne rozwiązanie nie jest lepsze niż inne – są tylko takie, które są lepsze dla konkretnej aplikacji lub problemu.
Niektóre aplikacje wymagają połączenia peer-to-peer, z niskim opóźnieniem i wysokim transferem danych, i mogą zaakceptować utratę pakietów (informacji). Inne aplikacje mogą ankiewać serwer na podstawie potrzeb i Don’Trzeba otrzymywać komunikację od innego rówieśnika. Inne aplikacje wymagają komunikacji w czasie rzeczywistym z niezawodnością danych.
Internetowa gra dla wielu graczy, aplikacja do przesyłania wiadomości, strona internetowa blogu, aplikacja galerii multimediów i oprogramowanie do konferencji wideo mają różne poziomy potrzeb komunikacyjnych i danych.
Jeśli budujesz rozwiązanie do przesyłania strumieniowego wideo, istnieją również inne rozważania, zobacz nasz artykuł na temat protokołów strumieniowych wideo, aby uzyskać więcej informacji na temat wyboru prawidłowego.
Jaki jest protokół komunikacji?
W sieci komputerowej protokół to zestaw reguł regulujących sposób wymiany danych między urządzeniami. Protokół określa reguły, składnię, semantykę i synchronizację komunikacji i możliwe metody odzyskiwania błędów.
Protokoły omówione w tym artykule określają, w jaki sposób oprogramowanie warstwy aplikacji będzie oddziaływali ze sobą. Różne protokoły są zgodne z różnymi zasadami, a’jest niezbędne do zrozumienia mocnych i ograniczeń każdego z nich. W tym artykule ty’Dowiedz się o następujących protokołach:
Http (Hypertext Transfer Protocol) to protokół aplikacji systemów informacyjnych rozproszonych, współpracy i hipermedia. HTTP jest podstawą komunikacji danych dla sieci WWW. Hipertext to tekst strukturalny, który używa linków logicznych (hiperłącza) między węzłami zawierającymi tekst. HTTP to protokół wymiany lub przesyłania hipertekstu.
HTTP/2 Został zaprojektowany w celu rozwiązania niedociągnięć oryginalnego protokołu HTTP i poprawy wydajności. HTTP/2 jest szybszy i bardziej wydajny niż HTTP/1.1, a obsługuje multipleksowanie, aby umożliwić multipleksowanie wielu żądań i odpowiedzi przez jedno połączenie. Inne godne uwagi funkcje obejmują kompresję nagłówka i pchanie serwera. To’S stopniowo staje się domyślnym protokołem ruchu internetowego.
WebSocket to protokół umożliwiający dwukierunkową komunikację między klientem a serwerem. Jest to popularny wybór aplikacji obsługujących dane w czasie rzeczywistym, takie jak aplikacje czatowe, gry online i przesyłanie strumieniowe danych na żywo.
GRPC to nowoczesna struktura RPC z otwartym poziomem, która wykorzystuje HTTP/2 do transportu. To świetny wybór dla aplikacji, które muszą wykonać wiele małych, szybkich połączeń API. GRPC generuje powiązania klienta i serwera krzyżowego dla wielu języków, co umożliwia aplikację kliencką do bezpośredniego wywołania metody na aplikacji serwerowej na innym komputerze, tak jakby był obiektem lokalnym.
WEBRTC jest technologią, która pozwala na komunikację w czasie rzeczywistym między klientami i umożliwia ustanowienie bezpośrednich połączeń peer-to-peer. Jest używany do aplikacji wideo, czatu, udostępniania plików i transmisji transmisji wideo na żywo.
Zrozumienie TCP i UDP
Przed zagłębieniem się w wyżej wymienione warstwy aplikacji, IT’ważne jest, aby mieć podstawowe zrozumienie TCP i UDP, dwie podstawowe warstwy transportowe, które ułatwiają transfer danych w zasadniczo różne sposoby.
TCP (protokół kontroli transmisji) jest standardem, który określa, jak nawiązać i prowadzić rozmowę sieciową za pośrednictwem Internetu. TCP jest najczęściej używanym protokołem w Internecie i każdej sieci zorientowanej na połączenia. Podczas przeglądania sieci komputer wysyła pakiety TCP na serwer WWW. Serwer WWW odpowiada, wysyłając pakiety TCP z powrotem do komputera. Połączenie jest najpierw ustanawiane między dwoma urządzeniami przed wymienianiem dowolnych danych, a TCP używa korekty błędów, aby upewnić się, że wszystkie pakiety są dostarczane pomyślnie. Jeśli pakiet zostanie utracony lub uszkodzony, TCP spróbuje go ponownie wyśledzić.
UDP (protokół DataGram User) jest bez połączeń, niewiarygodnym protokołem warstwy transportowej. Nie wymaga ustalenia lub utrzymania połączenia i nie gwarantuje, że wiadomości zostaną dostarczone w porządku. Co oznacza, że może wystąpić utrata danych, jeśli pakiet nie zostanie wysłany lub jeśli to’S uszkodzony. UDP jest często używany do strumieniowego multimediów lub aplikacji w czasie rzeczywistym, w których upuszczone pakiety są mniej problematyczne niż zapewnienie dostawy.
HTTP/1
To’Ważne jest, aby mieć podstawowe zrozumienie podstawy całej komunikacji internetowej i transferu danych w warstwie aplikacji – HTTP (Hypertext Transfer Protocol).
Zrozumienie HTTP/1 i jego ograniczenia będą również ważne, zanim będziemy mogli bardziej szczegółowo zbadać inne protokoły i w pełni docenić to, co zapewniają.
Z HTTP klienci i serwery komunikują się poprzez wymianę poszczególnych wiadomości. Wiadomości, które klient wysyła, nazywane są żądaniami, a wiadomości wysyłane przez serwer są wywoływane odpowiedzi. Te wiadomości są wysyłane jako zwykłe wiadomości tekstowe przez połączenie TCP. Można je również szyfrować za pomocą TLS i wysłać za pomocą protokołu HTTPS.
Klient zazwyczaj będzie przeglądarką internetową lub aplikacją działającą na użytkowniku’s telefon lub komputer, ale technicznie może to być wszystko, na przykład skrypt, który czołga witryny.
Żądania HTTP mogą płynąć tylko w jednym kierunku, z klienta do serwera. Serwer nie ma możliwości inicjowania komunikacji z klientem; może odpowiadać tylko na prośby.
HTTP jest idealny do tradycyjnych aplikacji internetowych i klientów, w których informacje są pobierane w sposób potrzebny. Na przykład odświeżasz stronę i do serwera składa się żądanie, aby pobrać najnowsze informacje.
Jednak ten protokół rozszerzył się w taki sposób, że nie był pierwotnie przeznaczony. W poniższych sekcjach my’Zbadaj trochę HTTP/1’ograniczenia s.
HTTP/1 w czasie rzeczywistym
HTTP/1 jest nieefektywny, gdy wiadomości muszą być wysyłane w czasie rzeczywistym od klienta na serwer i odwrotnie. Na przykład, jeśli nowe informacje są dostępne na serwerze, które muszą być udostępnione klientowi, transakcja ta może wystąpić dopiero po rozpoczęciu żądania klienta.
Istnieją na to obejścia, przy użyciu technik o nazwie HTTP krótkie i długie ankiety, a także zdarzenia Server-Sent.
Krótkie ankiety
Krótkie ankiety HTTP to technika, w której klient wielokrotnie wysyła żądania do serwera, dopóki nie zareaguje nowymi danymi. Po otrzymaniu danych rozpoczyna proces ponownie i wielokrotnie pyta, dopóki nie będzie dostępne coś innego.
Jest to nieefektywna strategia komunikacji w czasie rzeczywistym, ponieważ marnuje wiele zasobów poprzez ciągłe przekazywanie i analizowanie żądań/odpowiedzi HTTP.
Długie ankiety
Dzięki długie ankietom HTTP jedno żądanie jest składane od klienta, a następnie serwer utrzymuje otwarte połączenie, aż nowe dane będą dostępne i można wysłać odpowiedź. Po otrzymaniu odpowiedzi klienta nowe połączenie jest natychmiast wykonane.
Długie ankiety jest bardziej wydajne niż krótkie ankiety, ale nie jest optymalnym rozwiązaniem komunikacji w czasie rzeczywistym.
Zdarzenia ze sentami serwera (SSE)
Zdarzenia wysyłane przez serwer pozwala klientowi otworzyć połączenie i odbierać aktualizacje (komunikaty push) z serwera w czasie rzeczywistym, bez konieczności ciągłego ankietowania serwera w celu uzyskania nowych danych. Jest to połączenie jednokierunkowe, więc nie możesz wysyłać zdarzeń od klienta na serwer.
SSE to standard opisujący, w jaki sposób serwery mogą inicjować transmisję danych do klientów po ustaleniu pierwszego połączenia klienta.
Problem wydajności z HTTP/1
Większość przepływów danych HTTP składa się z małych, rozrywkowych transferów danych, podczas gdy TCP jest optymalizowany pod kątem długoterminowych połączeń i przelewów danych masowych. Czas podróży w obie strony jest czynnikiem ograniczającym przepustowość i wydajność TCP w większości przypadków. W związku z tym opóźnienie jest wąskim gardłem, a większość aplikacji internetowych dostarcza go.
Powyższe oznacza, że TCP, którego używa HTTP, został zbudowany do obsługi długotrwałych połączeń i przesyłania wielu danych. Z drugiej strony HTTP/1 otworzył kilka krótkotrwałych połączeń TCP i zwykle wysyłałby tylko małe dane.
Blokowanie głębi linii
Problem z wydajnością z HTTP/1.0 polega na tym, że musisz otworzyć nowe połączenie TCP dla każdego żądania/odpowiedzi. To nie był problem z tym, do czego HTTP został początkowo wynaleziony. Część dokumentu jest ważna, ponieważ HTTP nie był przeznaczony “Hypermedia”.
Otwarcie nowego połączenia TCP dla każdego żądania stało się problemem w miarę ewolucji sieci. Zaczęliśmy budować pełne aplikacje zamiast prostych stron internetowych, a liczba mediów i plików, którą przeglądarka potrzebna do odzyskania stała się więcej. Wyobraź sobie typową aplikację internetową, która wymaga pliku HTML, CSS i JavaScript, a także różnych obrazów i innych zasobów. Dla każdego pliku trzeba było nawiązać nowe połączenie.
Wzdłuż przychodzi http/1.1, który ma trwałe połączenia, które określają, że możemy mieć więcej niż jedno żądanie lub odpowiedź w tym samym połączeniu TCP.
To rozwiązanie jest zdecydowanie ulepszeniem, ale nie pozwala serwerowi odpowiadać jednocześnie wieloma odpowiedziami. To’s serializowany protokół, w którym musisz wysłać żądanie i poczekać na odpowiedź, a następnie wysłać drugie żądanie i tak dalej. Jest to znane jako blokowanie głowy.
Możliwe jest jednak osiągnięcie równoległości, ponieważ przeglądarka może otworzyć do sześciu połączeń TCP z tym samym pochodzeniem – gdzie “pochodzenie” jest zdefiniowane jako unikalna kombinacja gospodarz I Port numer.
Na przykład, jeśli masz aplikację galerii zdjęć, która musi załadować 12 zdjęć, wówczas zostanie złożone sześć żądań, aby załadować pierwsze sześć zdjęć, a każde żądanie otworzy nowe połączenie TCP pod maską. Pozostałe sześć obrazów zostanie zablokowane do momentu otrzymania odpowiedzi i jednego z otwartych połączeń do załadowania następnego obrazu. Oryginalne sześć otwartych połączeń TCP z tym samym pochodzeniem zostanie ponownie wykorzystywane, ponieważ będą one dostępne, ale jesteś ograniczony do sześciu aktywnych połączeń.
Oczywiście programiści znaleźli łatwe obejście – zmieniając pochodzenie. Zamiast hostować wszystkie zasoby na tym samym pochodzeniu, organizujesz sześć zdjęć na jednym pochodzeniu, a resztę na drugim. Teraz możesz mieć 12 jednoczesnych żądań (lub otworzyć połączenia TCP). Jest to określane jako “Sharding”.
- Obrazy 1-6 są hostowane na 1.obrazy.com
- Obrazy 7-12 są hostowane na 2.obrazy.com
Istnieje jednak ograniczenie tego, ile razy możesz to zrobić i to’jest trudny do ustalenia optymalnej liczby odłamków. W pewnym momencie dodanie większej liczby odłamków zwiększy złożoność, doda koszty ogólne i może spowodować, że linki zostaną zatłoczone i zgubione pakiety.
Istnieją również inne obawy, ponieważ każde połączenie TCP dodaje do serwera niepotrzebne koszty ogólne. Połączenia konkurują ze sobą, każdy uścisk dłoni TCP i. Istnieje wyraźne ograniczenie w sposobie, w jaki HTTP/1 korzysta z podstawowych połączeń TCP.
Nagłówki i ciasteczka wzdęcia
Innym problemem jest to, że w miarę ewolucji specyfikacji HTTP do specyfikacji dodano więcej nagłówków. Deweloperzy mają również możliwość dodawania plików cookie do nagłówków, które mogą być dowolnie duże. To dodaje dużo wzdęć, ponieważ każde żądanie i odpowiedź musi przekazywać wszystkie informacje o tekście, a HTTP/1.1 nie obejmuje mechanizmu ściskających nagłówków i metadanych.
Jeśli potrzebujesz wysokowydajnego protokołu RPC, ten narzut sumuje się szybko, a HTTP nie jest już optymalnym rozwiązaniem.
Ustalanie priorytetów
Z HTTP/1.1, przeglądarki “priorytet” Zasoby, trzymając priorytetową kolejkę na klienta i przyjmując wykształcone przypuszczenia, jak najlepiej wykorzystać dostępne połączenia TCP. Przeglądarki osadziły heurystykę do ustalenia, jakie zasoby są cenniejsze niż inne.
Na przykład ładowanie CSS będzie wymagało wyższego priorytetu niż ładowanie obrazów.
Problem polega na tym, że jako programista nie ma sposobu, aby priorytetowo traktować jedno żądanie nad drugim lub zmienić priorytet ciągłej wiadomości. Jaka zawartość jest ładowana najpierw do przeglądarki i nie masz nic do powiedzenia w schemacie priorytetów.
HTTP/2
HTTP/2 to ulepszona wersja protokołu HTTP i rozwiązuje wszystkie problemy z wydajnością przedstawione powyżej z HTTP/1 i dodaje inne ulepszenia bez zmiany żadnej semantyki (czasowniki, nagłówki itp.).
Najważniejszą zmianą w HTTP/2 jest użycie multipleksowania do jednoczesnego wysyłania i odbierania wielu żądań i odpowiedzi HTTP w stosunku do Pojedyncze połączenie TCP. Wszystkie połączenia HTTP/2 są trwałe, a wymagane jest tylko jedno połączenie na pochodzenie. Pozwala to na znacznie bardziej wydajne wykorzystanie zasobów sieciowych i może znacznie poprawić wydajność aplikacji.
Kilka innych korzyści z HTTP/2:
- Używa kompresji nagłówka, aby zmniejszyć rozmiar nagłówków, co uniknie wysyłania tych samych nagłówków tekstowych w kółko. To znacznie zmniejsza koszty ogólne żądań/odpowiedzi i ilość wysłanych danych.
- Umożliwia priorytety, umożliwiając klientowi (deweloperowi) określenie priorytetu potrzebnych zasobów. To’S jest również możliwe aktualizację priorytetu bieżących żądań – na przykład w Scroll, jeśli obraz nie jest już widoczny, priorytet może się zmienić.
- Używa push serwera do wysyłania danych do klienta, zanim je zażąda. Można to wykorzystać do poprawy czasów ładowania, eliminując potrzebę składania wielu żądań.
Jak działa HTTP/2?
Podstawowa jednostka protokołu w HTTP/2 to a rama. Ten nowy mechanizm binarnego kadrowania zmienia sposób wymiany danych między klientem a serwerem.
Standard definiuje dziesięć różnych rodzajów ramek, z których każdy służy inny cel. Na przykład nagłówki i ramy danych stanowią podstawę żądań i odpowiedzi HTTP:
A rama jest najmniejszą jednostką komunikacji, która zawiera określony rodzaj danych.
Niektóre inne przykłady ramek to:
- Ustawienia: Wymień informacje o ustawieniu na początku lub podczas połączenia.
- Priorytet: Ponowne uznanie dla wiadomości.
- Push_promise: pozwala serwerowi naciskać dane do ciebie – działa to jako obietnica wyśle serwera. Na przykład, jeśli poprosisz o indeks.HTML, serwer może utworzyć push_promise, który obiecuje pchanie aplikacji.JS i style.CSS, co oznacza, że klient nie musi żądać tych zasobów.
Ramy są łączone, aby utworzyć wiadomość, Na przykład nagłówek i ramka danych na powyższym obrazku. To odpowiada normalnemu żądaniu lub odpowiedzi.
Wreszcie seria wiadomości może być częścią strumień. Pozwala to na dwukierunkowy przepływ danych między klientem a serwerem oraz pełne multipleksowanie żądań i odpowiedzi.
Powyższy obraz jest nieco wprowadzający w błąd, co daje wrażenie, że wiele połączeń jest otwartych między klientem a serwerem. Ale jest to pojedyncze połączenie TCP, a dane przepływają swobodnie między klientem a serwerem w sposób nie blokujący.
Nowa binarna warstwa kadrowania pozwala klientowi i serwerowi rozbić komunikat HTTP na niezależne ramki, przeplatają je, a następnie ponownie złożyć na drugim końcu.
To jest tylko podsumowanie sposobu, w jaki HTTP/2.0 prac. Jeśli chcesz dowiedzieć się więcej i zbadać priorytety, pchnięcie serwera i kompresję nagłówka, zobacz to szczegółowy artykuł. W historii problemów HTTP/1 i tego, jak HTTP/2 rozwiązuje je, obejrzyj ten film.
HTTP/2 dwukierunkowe przesyłanie strumieniowe danych
- Pojedyncze połączenie HTTP/2 może zawierać wiele jednoczesnych otwartych strumieni, z albo końcowymi ramkami przeplatającymi się z wielu strumieni.
- Strumienie mogą być ustanawiane i używane jednostronnie lub udostępniane przez klienta lub serwer.
- Strumienie mogą być zamknięte w dowolnym punkcie końcowym.
Istnieje wiele nieporozumień z funkcją pchania serwera, co pozwala serwerowi przez HTTP/2 na proaktywnie wysyłać zasoby, które według nich może potrzebować na przykład .JS i .pliki CSS, bez żądania klienta. Nie ma to nic wspólnego z dwukierunkowym przesyłaniem strumieniowym i jest tylko techniką optymalizacji sieci dla zasobów do buforowania.
To prawda, że z HTTP/2 serwer może’t zainicjuj a strumień. Ale gdy klient otworzy strumień, wysyłając żądanie, obie strony mogą wysyłać dane ramki nad trwałym gniazdem w dowolnym momencie. Doskonałym tego przykładem jest GRPC, o którym omówimy później.
W przypadku HTTP/2 można osiągnąć dwukierunkowe przesyłanie strumieniowe danych i możesz argumentować, że to’jest bardziej optymalnym rozwiązaniem niż coś takiego jak WebSockets lub możesz argumentować, że tak nie jest. My’Omów to bardziej szczegółowo w sekcji WebSocket.
WebSockets
Celem tej technologii jest dostarczenie mechanizmu aplikacji opartych na przeglądarce, które wymagają dwukierunkowej komunikacji z serwerami, które nie opierają się na otwarciu wielu połączeń HTTP (e.G., za pomocą XMLHTTPREQUEST lub IFRA I IFRA I IF TRAMES).
WebSockets zostały wynalezione, aby włączyć komunikację pełnoziarnistą między klientem a serwerem, co umożliwia natychmiastowe podróżowanie w obie strony przez pojedyncze otwarte połączenie.
Po ustaleniu połączenia WebSocket klient nie musi ankietować serwera w celu uzyskania aktualizacji. Zamiast tego zdarza się komunikacja dwukierunkowa. Poprawia to prędkość i możliwości w czasie rzeczywistym w porównaniu z oryginalnym długim i krótkim zatopieniem HTTP/1. WebSocket nie ma formatu, który jest zgodny. Możesz wysłać dowolne dane, tekst lub bajty – ta elastyczność jest jednym z powodów, dla których WebSockets są popularne.
Niektóre z tego mogą wydawać się znajome z tym, co rozmawialiśmy w sekcji HTTP/2, ale to’jest ważne, aby zauważyć, że WebSockets zostały wynalezione na długo przed HTTP/2. My’Porównaj je bardziej później.
Jak działają WebSockets
WebSockets skutecznie działają jako warstwa transportowa nad TCP.
Aby ustanowić połączenie WebSocket, klient i serwer najpierw muszą wykonać uścisk dłoni przez normalny HTTP/1.1 połączenie. Ten uścisk dłoni jest mostem od HTTP do WebSockets.
Poniżej znajduje się przykładowe żądanie uścisku klienta. Klient może użyć HTTP/1.1 Mechanizm zwany nagłówkiem aktualizacji do zmiany połączenia z HTTP na WebSockets:
Pobierz /czat http /1.1 Host: Przykład.com: 8000 aktualizację: WebSocket Połączenie: aktualizację SEC-WEBSocket-key: dghlihnhbxbsBub25jzq == sec-websocket-wersja: 13
Następnie serwer zakończy uścisk dłoni ze specjalną odpowiedzią, która wskazuje, że protokół będzie zmienia się z HTTP na WebSocket:
HTTP/1.1 101 Protokoły przełączania Uaktualnienie: WebSocket Połączenie: Uaktualnienie SEC-WEBSocket-Accept: S3PPLMBITXAQ9KYGZZHZRBK+XOO =
WebSockets wymagają jednolitego identyfikatora zasobów (URI) z schematem WS: // lub WSS: //. Schemat WS: // jest używany do niezadowolonych połączeń, a schemat WSS: // jest używany do szyfrowanych połączeń, podobnie jak Schemat HTTP URL HTTP: // lub https: //.
Po ustanowieniu dwukierunkowego kanału komunikacyjnego klienta i serwer mogą wysyłać wiadomości tam iz powrotem. Te wiadomości mogą być od danych binarnych po tekst. Połączenie WebSocket pozostanie otwarte, dopóki klient lub serwer nie odłączy.
Multipleksowanie WebSocket
W chwili pisania pisma protokół WebSocket nie obsługuje wbudowanego multipleksowania. Omówiliśmy multipleksowanie w sekcji HTTP/2 i dowiedzieliśmy się, że to’s wbudowana funkcja dla HTTP/2 i’możliwe, że wiele strumieni multipleksuje się w tym samym połączeniu. Każdy strumień otrzymuje unikalny identyfikator, a wszystkie wysłane ramki mają identyfikator powiązany z odpowiednim strumieniem.
Brak obsługi multipleksowania oznacza, że protokół WebSocket wymaga nowego połączenia transportowego dla każdego połączenia WebSocket. Na przykład wielu klientów działających w różnych zakładkach tej samej przeglądarki spowoduje osobne połączenia. Aby mieć multipleksowanie na WebSockets, jest zazwyczaj czymś, co musisz zaimplementować jako programista lub polegać na wtyczce lub bibliotece innej firmy.
WebSocket vs HTTP/2
Czy HTTP/2 zastąpił WebSockets? Krótka odpowiedź brzmi nie. Dłuższa odpowiedź jest taka, że HTTP/2 umożliwia dwukierunkowe przesyłanie strumieniowe, w wyniku czego WebSockets nie są jedyną/najlepszą opcją. HTTP/2 jako specyfika. Ma wbudowane multipleksowanie i w większości przypadków spowoduje mniej otwartych połączeń TCP z pochodzeniem. Z drugiej strony, WebSockets zapewniają dużą swobodę i nie są restrykcyjne w sposobie wysyłania danych między klientem a serwerem po nawiązaniu połączenia. Będziesz jednak musiał sam zarządzać ponownym połączeniem (lub polegać na bibliotece, która robi to dla ciebie).
Które jest ostatecznie lepsze, a gdzie jeden będzie działał, a drugi nie, jest przedmiotem debaty, a ten artykuł nie udziela opinii. WebSockets oferują dużą elastyczność, a jako ustalony standard jest w pełni obsługiwany przez wszystkie nowoczesne przeglądarki, a ekosystem wokół bibliotek klientów i serwerów jest solidny.
Aby uzyskać bardziej szczegółowe i opinione dyskusje, zobacz te stosowanie Pytania o przepełnienie stosu:
- Czy HTTP/2 sprawia, że WebSocket jest przestarzały
- HTTP/2 lub WebSockets dla klientów o niskim opóźnieniu komunikatów serwerowych
- HTTP/2 VS Sockets do dwukierunkowego przesyłania wiadomości
Istnieje również RFC, aby umożliwić mechanizm uruchamiania protokołu WebSocket przez pojedynczy strumień połączenia HTTP/2.
Możliwość ładowania WebSockets z HTTP/2 umożliwia udostępnianie jednego połączenia TCP zarówno przez protokoły, jak i rozszerza bardziej efektywne wykorzystanie sieci HTTP/2.
Zostało to zaimplementowane w Chrome i Firefox. Tutaj możesz przeczytać dokument projektowy Chrome i motywację.
Kiedy powinieneś korzystać z WebSockets?
WebSockets najlepiej nadają się do aplikacji, które wymagają dwukierunkowej komunikacji w czasie rzeczywistym i gdy małe dane muszą być szybko przesyłane, na przykład:
- Aplikacje czatu
- Gry wieloosobowe
- Współpracowanie aplikacji do edycji
- Ticker na żywo
- Wniosek o handel akcjami
- Aktywność w czasie rzeczywistym
Przypadkowo jest to obszar, w którym nasz zespół ma duże doświadczenie. My’Ponowne szeroko używając WebSockets do zasilania naszej infrastruktury czatu i aktywności.
Obsługa WebSockets jest dobra i jest obsługiwana przez główne przeglądarki i klientów od dłuższego czasu, a także jest dobrze udokumentowany i łatwy w użyciu. Jednak WebSockets nie należy nadużywać; W zależności od tego, co chcesz, mogą być lepsze alternatywy.
Na przykład zdarzenia wysłane serwerami (SSE) są wydajne w stosunku do HTTP/2 i proste w użyciu. SSE nie jest dwukierunkowym systemem komunikacji; Serwer jednostronnie przesuwa dane do klienta. Ale jeśli wszystko, czego potrzebujesz, jest sposobem na wysłanie danych do klienta, jest to potencjalnie lepsza opcja niż dodanie kosztów ogólnych WebSockets. SSE spada również do HTTP/1.1 Gdy HTTP/2 nie jest dostępne. Dodatkowo klient (lub przeglądarka) zarządza połączeniem dla Ciebie i obsługuje automatyczne ponowne połączenie.
Jeśli połączenie z WebSockets zostanie utracone, nie ma uwzględnionych mechanizmów równoważenia obciążenia lub ponownego połączenia. Musi to zostać zaimplementowane ręcznie lub przez biblioteki stron trzecich.
GRPC
GRPC to nowoczesna frameworka zdalnego procedury o wysokiej wydajności (RPC), która może działać w dowolnym środowisku. Może efektywnie łączyć usługi w centrach danych i między nimi z obsługą wtyczkową do równoważenia obciążenia, śledzenia, sprawdzania zdrowia i uwierzytelniania. Ma również zastosowanie w ostatniej mili rozproszonej obliczeń do łączenia urządzeń, aplikacji mobilnych i przeglądarków do usług zaplecza.
GRPC to system RPC oparty na umowie, oparty na umowie, początkowo opracowany w Google. GRPC umożliwia aplikacjom komunikację przejrzystości i upraszcza budowanie połączonych systemów.
Generuje powiązania klienta i serwera między wieloma językami, co umożliwia aplikację klienta bezpośrednio wywołanie metody na aplikacji serwerowej na innym komputerze, tak jakby był obiektem lokalnym.
Zbudowany na HTTP/2, GRPC wykorzystuje takie funkcje, jak dwukierunkowe strumieniowanie i wbudowane bezpieczeństwo warstw transportowych (TLS).
Motywacja GRPC
To’jest ważne, aby zanurzyć się w motywacji stojącej za GRPC i dlaczego został wymyślony, aby zrozumieć jego korzyści. Dlaczego nie użyć istniejącej technologii, którą już mamy: na przykład HTTP/2 i WebSockets? Dlaczego potrzebujemy kolejnej warstwy abstrakcji oprócz tego, co już mamy?
Istnieją różne sposoby ustrukturyzowania danych i wysyłania przez Internet. Niektóre popularne przykłady to mydło, odpoczynek i grafql. Możesz nawet stworzyć własny protokół, wysłać dane przez RAW TCP i samodzielnie obsługiwać implementację, jeśli chcesz.
Ale bez względu na to, co wybierzesz jako protokół komunikacji, problem polega na tym, że musisz upewnić się, że klient i serwer uzgodnią protokół. Na przykład, jeśli ty’Ponowne budowanie interfejsu API REST, biblioteka klientów, której musisz użyć do wysyłania danych REST, to biblioteka HTTP. Biblioteka HTTP jest domyślnie wbudowana w przeglądarkę, a przeglądarka obsługuje wszystko dla Ciebie:
- Ustanawia komunikację z serwerem.
- Obsługuje HTTP/2 i Fallback do HTTP/1. I będzie musiał w przyszłości obsługiwać HTTP/3.
- Obsługuje TLS i negocjuje protokół.
- Obsługuje nagłówki, strumienie i wszystko inne.
Ale co, jeśli ty’nie w przeglądarce? Co jeśli ty’Ponownie aplikację Python działającą na jakimś serwerze, Golang CLI lub aplikacji Flutter działającą na iOS? Wszyscy ci klienci potrzebują własnej biblioteki HTTP, która rozumie protokół, z którym się komunikujesz.
Na szczęście wielu oddanych ludzi pracuje nad różnymi bibliotekami HTTP dla wszystkich tych języków i frameworków. Niektóre języki mają nawet wiele bibliotek HTTP o różnych funkcjach. Wszystko to jednak kosztuje – i to jest konserwacja.
Koszt ten może wpłynąć na ciebie w przypadku, gdy miałeś na przykład zaktualizować swój serwer do HTTP/2, jeśli biblioteka Golang, której używasz. Ale na twoim kliencie Python z frontu równoważna biblioteka HTTP nie zaimplementowała HTTP/2 lub nie może być już utrzymywana. Nie można porównać różnych bibliotek HTTP w innych językach 1: 1.
W miarę ewolucji specyfikacji HTTP biblioteki muszą nadążyć za postępem, problemami bezpieczeństwa, nowymi funkcjami i innymi łatami. HTTP to tylko przykład, a to samo dotyczy protokołu WebSocket lub dowolnego innego. Coś może być dobrze zaimplementowane w głównych przeglądarkach, ale funkcjonalność ta musi być przeniesiona do wielu różnych języków i frameworków.
Czym różni się GRPC?
GRPC próbuje rozwiązać ten problem poprzez utrzymanie biblioteki samych języków popularnych, co oznacza, że dodane nowe funkcje będą obsługiwane przez wszystkie te języki.
Pod maską GRPC używa HTTP/2 jako protokołu, jednak ta implementacja jest przed tobą ukryta. W przyszłości opiekunowie GRPC mogą łatwo zastąpić HTTP/2 HTTP/3, a natychmiast skorzystacie z tej zmiany.
GRPC wykorzystuje również bufory protokołu jako język definicji interfejsu (IDL) i jego podstawowy format wymiany wiadomości. Ten format jest neutralny w języku i umożliwia łatwa komunikacja między różnymi językami programowania. My’Zbadaj tę koncepcję bardziej w następnej sekcji.
Jakie są bufory protokołu?
Bufory protokołów to neutralne dla języka Google, neutralne platformy, rozszerzalny mechanizm serializacji danych strukturalnych-pomyśl XML, ale mniejsze, szybsze i prostsze. Zdefiniujesz, w jaki sposób chcesz, aby Twoje dane były kiedyś ustrukturyzowane. Następnie możesz użyć specjalnego wygenerowanego kodu źródłowego do łatwego zapisu i odczytania danych strukturalnych do iz różnych strumieni danych i używania różnych języków.
Tradycyjnie z interfejsem API, nie’t mają umowę określoną przez sam protokół. Na przykład, jeśli ty’ponownie za pomocą odpoczynku, ty’Zazwyczaj po prostu wysyłanie wiadomości JSON z parami klucza/wartości, które są’t sprawdzone, aż wiadomość zostanie na końcu odbierania. Ta wiadomość może być zazwyczaj wszystko i to’do Ciebie, aby upewnić się, że właściwa struktura jest zdefiniowana.
Spójrz na następujący ładunek JSON:
‘ID’: 123 ‘nazwa’: ‘Gordon’, ‘e-mail’: ‘Gordon@gdzieś.io’
Po otrzymaniu tych danych na kliencie/serwerze można je na przykład deserializować w obiekcie:
osoba klasowa
Jednak jako programista należy zaimplementować prawidłową logikę serializacji i deserizacji wyżej wspomnianego ładunku – może to obejmować ręczne pisanie metod Tojson i FromJson, poleganie na generowaniu kodu lub może to być wbudowana funkcja języka, którego język ty’ponowne użycie.
Niezależnie od tego, jak serializujesz te dane, podstawowy kod będzie musiał być ręcznie aktualizowany, potencjalnie w wielu środowiskach, w przypadku zmian schematu.
Dzięki buforom protokołów tworzysz schemat, który definiuje typ obiektu dla pól i określają, które są wymagane i które są opcjonalne:
// Wiadomość żądania zawierająca osobę’S Osoba informacyjna < optional int32 required string name = 2; optional string email = 3; >// Wiadomość odpowiedzi zawierająca wiadomość z życzeniami
Następnie możesz określić procedury, które chcesz ujawnić.
// Definicja usługi powitania. Pozdrowienia serwisowe < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
Kiedyś’ve określono struktury danych i schemat, używasz protokołu kompilatora buforu protokołu, aby generować klasy dostępu do danych w preferowanym języku z definicji proto.
Będą to interfejsy, które opisują obiekty przedstawione w pliku Proto, z akcesoriami dla każdego pola, a także metody serializacji/analizowania całej struktury do/z surowych bajtów.
Tryby GRPC
Istnieją cztery tryby transportu przez GRPC. Te cztery tryby replikują zachowanie, które wcześniej omówiliśmy, na przykład normalne żądanie/odpowiedź, SSE i WebSockets.
Unary Rpc
Unary RPC to proste żądanie i odpowiedź, podobnie jak wywołanie funkcji. Klient prosi o niektóre dane, a serwer wykonuje pewne przetwarzanie i zwraca te dane.
Streaming serwerowy RPC
Przesyłanie strumieniowe serwera RPC, w których klient wysyła jedno żądanie do serwera i oczekuje wielu lub strumienia odpowiedzi. Klient odczytuje z zwróconego strumienia, aż nie będzie więcej wiadomości.
Przykładem byłoby przesyłanie strumieniowe wideo, w którym poprosisz o załadowanie wideo, a serwer odpowiada strumieniu wideo.
Streaming klienta RPC
Klient strumieniowy RPCS, w których klient pisze sekwencję wiadomości i wysyła je na serwer, ponownie za pomocą dostarczonego strumienia. Gdy klient zakończy pisanie wiadomości, czeka, aż serwer je przeczyta i zwróci swoją odpowiedź.
Przykładem byłoby przesłanie dużego pliku do serwera, a po wysłaniu wszystkich danych klient może wysłać ostateczną wiadomość, aby wskazać, że przesłanie jest zakończone, a serwer może opcjonalnie odpowiedzieć.
Dwukierunkowy strumień RPC
Połączenie przesyłania strumieniowego klienta i serwera. Aplikacja czatu lub gra wideo dla wielu graczy to przykład, w którym dane muszą swobodnie płynąć między klientem a serwerem.
Dwukierunkowe rpc strumieniowe, w których obie strony wysyłają sekwencję wiadomości za pomocą strumienia odczytu i pisania. Dwa strumienie działają niezależnie, więc klienci i serwery mogą czytać i pisać w dowolnej kolejności.
W dwukierunkowym strumieniowym RPC połączenie jest inicjowane przez klienta wywołującego metodę. Przetwarzanie strumienia po stronie klienta i serwera jest specyficzne dla aplikacji. Ponieważ dwa strumienie są niezależne, klient i serwer mogą czytać i pisać wiadomości w dowolnej kolejności.
Mikrousług
Dobrym przykładem tego, gdzie GRPC jest potężny, znajduje się w mikrousługach.
W tym przykładzie mamy mikrousługę napisane w Pythonie, Javie i Golang. Te muszą wysłać dane między sobą.
Za pomocą HTTP/1.1 i JSON będą wymagać wdrożenia połączeń HTTP i serializacji dla każdego języka. Będziesz także musiał upewnić się, że schemat jest poprawnie zaimplementowany dla każdego języka, a jeśli API się zmieni, wszystkie usługi muszą być ręcznie zaktualizowane.
Z drugiej strony GRPC obsługuje implementację HTTP/2.0 protokół dla nas. Pisany jest pojedynczy schemat, a odpowiedni kod można wygenerować dla wszystkich używanych języków. Ten schemat może być postrzegany jako umowa, którą muszą przestrzegać wszystkich języków, dzięki czemu komunikowanie się między tymi usługami są znacznie łatwiejsze.
Wydajność GRPC
GRPC jest szybki i jest ogólnie znacznie bardziej wydajny niż równoważny odpoczynek:
- Bufory protokołów są serializowane i wysyłane jako binaria nad drutem, które są znacznie mniejsze niż normalne wiadomości JSON.
- GRPC używa HTTP/2.0 To zapewnia dalsze ulepszenia
GRPC Efektywnie kompresowanie wysłanych danych ma znaczącą przewagę, ponieważ im mniejszy przesyłanie ładunku danych, tym mniej potrzebnych jest wycieczki TCP. Maksymalna jednostka transmisyjna (MTU) to pomiar reprezentujący największy pakiet danych, który zaakceptuje urządzenie podłączone do sieci, czyli 1500 bajtów.
Kompresja jest dla Ciebie obsługiwana i korzystasz po prostu przy użyciu GRPC. Alternatywnie można użyć czegoś takiego jak GZIP do kompresji wiadomości JSON przed wysłaniem zwykłego HTTP. Może to jednak być niewygodne i dodaje warstwę złożoności. Różne języki i środowiska mogą również mieć różne poziomy wsparcia dla GZIP i innych równoważnych narzędzi kompresji. A dla każdego używanego języka, musisz samodzielnie ponownie dodać prawidłową logikę kompresji i komunikacji. Jest to podobny problem do tego, co rozmawialiśmy o bibliotece HTTP.
Kiedy powinieneś używać GRPC?
Jeśli ty’Ponowne korzystanie z wielu różnych języków programowania, które muszą ściśle zintegrować.
- Z przesyłaniem strumieniowym GRPC, to’jest możliwe, aby łatwo określić postęp przesyłania/pobierania – bez konieczności składania niepotrzebnych żądań dotyczących aktualizacji.
- To’jest możliwe anulowanie żądań.
- Wszystkie korzyści z HTTP/2.
- Jeśli GRPC obsługuje Twój język, nie masz’T muszę martwić się bibliotekami zewnętrznymi.
- GRPC nie obsługuje wszystkich języków.
- Schemat może wydawać się restrykcyjny i kłopotliwy.
- Może być skomplikowane w porównaniu z WebSockets.
- Wciąż młode i błędy mogą być trudne do debugowania.
- Komunikacja z GRPC nie działa natywnie z pudełka z przeglądarkami internetowymi. Musisz użyć biblioteki GRPC-WEB.
WEBRTC
Protokół WebRTC to bezpłatny projekt typu open source, który zapewnia komunikację w czasie rzeczywistym (RTC) dla Twojej aplikacji, która działa oprócz otwartego standardu. Obsługuje dane wideo, głosowe i ogólne wysyłane między rówieśnikami.
Technologia jest dostępna jako zestaw interfejsów API JavaScript dla wszystkich głównych przeglądarek i biblioteki dla natywnych klientów, takich jak aplikacje Android i iOS.
WEBRTC różni się od WebSockets i GRPC w fundamentalny sposób, a mianowicie, że po nawiązaniu połączenia dane mogą (w niektórych okolicznościach) być przesyłane bezpośrednio między przeglądarkami i urządzeniami w czasie rzeczywistym bez dotykania serwera.
Zmniejsza to opóźnienie i sprawia, że WebRTC jest doskonałe do udostępniania dźwięku, wideo lub ekranu – gdzie ważne jest niskie opóźnienia i należy wysłać wiele danych.
Motywacja WebRTC
WEBRTC zamierza standaryzować, w jaki sposób media, takie jak audio i wideo, są przekazywane przez drut-i wygodnie osiągnąć to za pomocą prostego w użyciu interfejsu API.
Inne rozwiązania, takie jak WebSockets, umożliwiają przesyłanie wszelkich danych między dwoma rówieśnikami; Jednak dane te muszą być przesyłane przez proxy lub serwer. Poleganie na innym serwerze dodaje opóźnień, ponieważ wszystko, co jest przesłane, należy je przeglądać, przetwarzać i odszyfrować. Między dwoma rówieśnikami jest średni. W przypadku przesyłania strumieniowego wideo, a nawet czatu w czasie rzeczywistym, to opóźnienie jest niepożądane.
Przeglądarki są teraz również potężniejsze niż kilka lat temu. Przeglądarki mają dostęp do kamery internetowej i mikrofonu, wymagające wbudowanego interfejsu API i łatwego sposobu przekazywania tych bogatych informacji. WEBRTC ma na celu uproszczenie całego procesu i ujawnienie łatwego w użyciu interfejsu API dostępnego w przeglądarkach.
Problem z WebRTC
Motywacja jest zdefiniowana i wydaje się, że WebRTC jest magicznym rozwiązaniem umożliwiającym szybszą komunikację między dwoma rówieśnikami. Ale niestety jest kilka problemów.
Pierwszym problemem jest to, że ustanowienie połączenia peer-to-peer nie jest proste-Internet jest skomplikowany, a istnieje wiele routerów, pełnomocników i zapór ogniowych między Alice w Kalifornii i Ben w Południowej Afryce. W niektórych okolicznościach może nie być możliwe posiadanie bezpośredniej linii między dwoma rówieśnikami. Związek między dwoma rówieśnikami może wymagać ominięcia zapory, która zapobiega otwartych połączeniach, możesz potencjalnie nie mieć publicznego adresu IP lub router może nie pozwolić na bezpośrednie połączenie między rówieśnikami.
Drugi problem polega na tym, że musi istnieć sposób, aby dwóch rówieśników odkryć się nawzajem i określić optymalną drogę, na której może się wydarzyć komunikacja. Wymaga to udostępnienia niektórych informacji między dwoma klientami, zanim będą mogli wiedzieć, jak najlepiej się ze sobą komunikować – a wspólnym sposobem udostępniania tych informacji jest korzystanie z WebSockets.
Co jest trochę zabawne. Jakiś Http Połączenie jest aktualizowane do WebSocket połączenie tylko w celu udostępnienia informacji w celu ustalenia WEBRTC połączenie.
Jeśli naprawdę chcesz docenić to, co robi WebRTC i jego złożoność, musisz zapoznać się z potencjalnie nieznanymi terminami: NAT, Ogłusznik, Turn, Ice, SDP i sygnalizacja.
Jak działa WebRTC?
W powyższym przeglądzie opisaliśmy motywację WebRTC, która opisuje podstawową ideę tego, jak to działa. Ta sekcja zanurzy się w niektórych tematach niższego poziomu, które musisz zrozumieć, aby w pełni uchwycić WebRTC.
Tłumaczenie adresu sieciowego (NAT)
Zrozumienie tego, czym jest Nat i jak to działa, jest niezbędne dla zrozumienia WebRTC.
NAT służy do podawania urządzenia (laptopa lub telefonu komórkowego) publicznego adresu IP; Jest to ważne, ponieważ chcemy nawiązać związek między dwoma rówieśnikami, którzy prawdopodobnie są oboje za routerem. Router będzie miał publiczny adres IP, a każde urządzenie podłączone do routera będzie miało prywatny adres IP.
Te urządzenia nie są’t bezpośrednio narażone na Internet. Zamiast tego cały ruch przechodzi przez router, który komunikuje się ze światem zewnętrznym. Gdy żądasz zasobów z zdalnego serwera, router jest odpowiedzialny “rozgromienie” żądanie z komputera lokalnego do tego serwera i kierowanie odpowiedzi z serwera z powrotem do komputera lokalnego.
Te żądania są przetłumaczone z urządzenia’S prywatny adres IP do routera’S publiczny IP z unikalnym portem – który jest następnie przechowywany w tabeli NAT. W ten sposób posiadanie unikalnego publicznego adresu IP dla każdego urządzenia w sieci lokalnej nie jest konieczne.
Powyższy obraz jest uproszczonym przykładem tego, jak wyglądałaby tabela NAT. Pozwalać’udawaj urządzenie lokalne, z prywatnym adresem IP 192.168.1.50, żąda adresu publicznego 82.88.31.26:80 dla niektórych danych.
Odbywa się to przez urządzenie lokalne, najpierw wysyłając żądanie do routera, co prowadzi żądanie do zdalnego urządzenia. Router poinformuje następnie zdalne urządzenie, aby wysłało odpowiedź na zewnętrzny adres IP z unikalnym portem, który w tym przykładzie jest 86.88.71.25: 8830.
Ten unikalny port jest ważny, ponieważ pozwoli routerowi ustalić, które urządzenie lokalne złożyło żądanie. Wszystkie te informacje są przechowywane w tabeli NAT. Gdy router otrzyma odpowiedź, może wykonywać wyszukiwanie i zdecydować, które urządzenie lokalne należy przekazać odpowiedź.
Jest to dość proste do zrozumienia, kiedy mamy normalną parę żądania/odpowiedzi – jedno urządzenie i jeden serwer. Ale co się stanie, jeśli inne urządzenie zewnętrzne z zupełnie innym adresem IP zdecyduje się wysłać pakiety na zewnętrzny adres IP routera na tym samym porcie, który był wcześniej używany? Jeśli router przekaże go na urządzenie lokalne, które jest zmapowane na ten numer portu?
Ta decyzja zależy od tego, który tłumaczenie NAT używa routera i ostatecznie określa, czy można ustalić połączenie peer-to-peer. W zależności od używanego routera zaimplementuje inne tłumaczenie NAT. Istnieją cztery różne metody tłumaczenia NAT:
- Nat jeden do jednego
- Adres ograniczony NAT
- Port Ograniczony Nat
- Symmetryczna NAT
Nat jeden do jednego: Mapy jeden zewnętrzny adres IP i port (zwykle publiczny) na jeden wewnętrzny adres IP i port (zwykle prywatny). W powyższym przykładzie, jeśli router otrzymuje odpowiedź na porcie 8830 i zewnętrzne IP 86.88.71.25, Przekazuje go do urządzenia lokalnego 192.168.1.50, ponieważ jest to urządzenie lokalne, które złożyło żądanie (informacje pobierane z tabeli NAT). Router nie dba o docelowe IP ani skąd pochodzi odpowiedź. Jeśli to’S na określonym porcie zewnętrznym trafia do tego urządzenia lokalnego.
Adres ograniczony NAT: Urządzenie zdalne może wysłać pakiet do urządzenia lokalnego tylko wtedy, gdy urządzenie lokalne wcześniej wysłało pakiet na zdalny adres IP. Podsumowując, zezwalamy na to, jeśli wcześniej komunikowaliśmy się z tym gospodarzem. W powyższym przykładzie zezwól tylko na pakiety z 86.88.71.25.
Port Ograniczony Nat: To samo co ograniczenie adresu, ale ograniczenie zawiera również numery portów. Urządzenie zdalne może wysłać pakiet do urządzenia wewnętrznego tylko wtedy, gdy urządzenie wewnętrzne wcześniej wysłało pakiet na adres IP X i Port P. W powyższym przykładzie pozwól tylko z 86.88.71.25 i port 80.
Symmetryczna NAT: Najbardziej restrykcyjny. Za to Zewnętrzne IP, port zewnętrzny, Docelowy adres IP, I Port docelowy wszyscy muszą dopasować to, co jest obecne w tabeli NAT. Oznacza to, że pakiety można wysłać do określonego portu urządzenia lokalnego.
WEBRTC nie działa nad symetryczną NAT i aby zrozumieć, dlaczego musimy zrozumieć, czym jest serwer ogłuszenia.
Session Traversal narzędzia dla NAT (ogłuszenie)
Ogłusznik jest protokołem informującym o publicznym adresie IP/porcie za pośrednictwem NAT i określenia wszelkich ograniczeń w router, które zapobiegałyby bezpośredniemu połączeniu z rówieśnikiem. Serwer ogłuszenia jest mechanizmem dla klientów do odkrycia obecności NAT, a także rodzaju NAT, oraz do określenia zewnętrznego adresu IP NAT i mapowania portów.
Celem żądania ogłuszenia jest określenie Twojej publicznej obecności, aby ta obecność publiczna mogła być następnie komunikowana z kimś innym, aby mógł się z tobą połączyć – komunikacja ta jest nazywana sygnalizacją, o której omówimy więcej później.
To działa dla Jeden na jednego, adres ograniczony, I Port Ograniczony Nat. Ale nie działa Symmetryczna NAT. Ponieważ kiedy żądasz serwera ogłuszenia informacji publicznych, ta para komunikacji została utworzona specjalnie dla klienta złożenia żądania. Nie można zaangażować innego rówieśnika za pomocą symetrycznego NAT – komunikacja przez port urządzenia lokalnego jest ograniczona do serwera ogłuszenia.
Utrzymywanie serwerów są lekkie i tanie w utrzymaniu. Istnieją publiczne oszałamiające serwery, które można zapytać za darmo.
Poniższy obraz ilustruje, kiedy działa ogłuszenie i kiedy można ustalić połączenie peer-to-peer.
Z drugiej strony, jeśli nie można ustalić połączenia peer-to-peer, na przykład, gdy peer stoi za symetrycznym NAT-wówczas końcowe połączenie w kroku trzecie. W miarę ustanowienia początkowego połączenia z serwerem ogłuszenia i żaden inny rówieśnik nie może użyć informacji o połączeniu.
W takim wydarzeniu, w którym nie można ustanowić bezpośredniego połączenia, musimy skorzystać z serwera Turn.
Traversal za pomocą przekaźników wokół NAT (tura)
Turn jest protokołem do przekazywania ruchu sieciowego, gdy nie można ustanowić bezpośredniego połączenia między dwoma rówieśnikami. Na przykład, jeśli jeden rówieśnik jest za symetrycznym NAT, potrzebny jest dedykowany serwer do przekazania ruchu między rówieśnikami. W takim przypadku utworzyć połączenie z serwerem Turn i poinformować wszystkich rówieśników, aby wysłali pakiety na serwer, który następnie zostanie przekazany do Ciebie.
Jest to koszty ogólne, a serwer turystyczny może być kosztowny w utrzymaniu i uruchomieniu.
Poniższy obraz ilustruje, w jaki sposób serwer Turn jest używany do przekazywania wiadomości między dwoma lub więcej rówieśnikami.
Interaktywne zakłady łączności (ICE)
ICE używa kombinacji protokołów ogłuszających i skrętu, aby zapewnić mechanizm dla hostów do odkrywania wzajemnych publicznych adresów IP i ustanowienia bezpośredniego połączenia. Jeśli bezpośrednie połączenie jest niemożliwe, ICE użyje zakrętu, aby ustalić połączenie przekaźnika między dwoma hostami.
Wszystkie te możliwe sposoby potencjalnego nawiązania połączenia nazywane są kandydatami do lodu. Wszystkie zebrane adresy są wysyłane do zdalnego rówieśnika za pośrednictwem SDP, który zbadamy następne. WebRTC wykorzystuje te informacje o każdym kliencie, aby określić najlepszy sposób połączenia się z innym równorzędnym. Może się zdarzyć, że obaj rówieśnicy są na tej samej NAT i że można ustalić połączenie lokalne lub może być tak, że obaj rówieśnicy są za symetryczną NAT i wymagają przekaźnika za pomocą serwera Turn Server.
Protokół opisu sesji (SDP)
SDP jest zasadniczo formatem danych do opisania sesji medialnych do ogłoszenia sesji, zaproszenia na sesję i innych form inicjowania sesji. Jest to standard opisywania treści multimedialnej dla połączenia, takie jak rozdzielczość, formaty, kodeksy i szyfrowanie.
Co ważne, to’S jest również używany do opisania kandydatów do ICE i innych opcji sieciowych. Kiedy Peer A chce połączyć się z Peer B, muszą udostępnić informacje SDP, aby się połączyć. Sposób udostępniania tego SDP jest całkowicie do – jest to określane jako sygnalizacja i zbadamy go następne.
Sygnalizacja – ustanowienie połączenia
Sygnalizacja to proces wysyłania informacji o kontroli między dwoma urządzeniami w celu ustalenia protokołów komunikacyjnych, kanałów, kodeków i formatów mediów oraz metody przesyłania danych, a także wszelkie wymagane informacje o routingu. Najważniejsza rzecz, którą należy wiedzieć o procesie sygnalizacji WebRTC: nie jest zdefiniowana w specyfikacji.
Połączenia rówieśnicze zajmują się podłączeniem dwóch aplikacji na różnych komputerach. Połączenie jest tworzone poprzez proces odkrycia i negocjacji zwany sygnalizacją.
Ważnym zastrzeżeniem jest to, że WebRTC nie ma wbudowanej sygnalizacji w ramach specyfikacji, ponieważ nie jest możliwe, aby dwa urządzenia bezpośrednio się kontaktują, które szczegółowo badaliśmy. Dla dwóch rówieśników do połączenia za pomocą WebRTC, wymagają swoich danych SDP.
Jako taki, jako deweloper, należy ustanowić sposób na udostępnienie tych informacji przez dwa urządzenia. Popularną opcją są WebSockets lub informacje sygnalizacyjne mogą być wysyłane w przód iw tył przez e -mail lub dostarczane pieszo i wprowadzać ręcznie w celu nawiązania połączenia.
Po udostępnieniu tych informacji masz wszystko, czego potrzebujesz, aby dwóch rówieśników mogło ustanowić połączenie WebRTC, może to być bezpośrednie połączenie lub może być za pośrednictwem serwera Turn.
Kiedy powinieneś korzystać z WebRTC?
Możesz nawet zapytać: dlaczego miałbym korzystać z WebRTC? Zrozumienie i jeszcze bardziej skomplikowane jest skomplikowane.
Skomplikowane jest skonfigurowanie, ale ma wiele korzyści:
- API jest łatwy w użyciu i jest dostępny bezpośrednio w przeglądarce.
- Ma dobrą wydajność, umożliwiając transmisję treści o wysokiej przepustowości, takiej jak wideo lub audio.
- Bardziej zaawansowane funkcje, takie jak udostępnianie ekranu i udostępnianie plików, można łatwo wdrożyć.
- Obsługuje połączenie peer-to-peer ze zmniejszonym opóźnieniem.
- Bezpłatne i open source.
- Brak wbudowanej sygnalizacji.
- Musisz utrzymać serwery ogłuszające i obracające.
- W przypadku połączeń grupowych (takich jak grupowa połączenie wideo) może być potrzebne SFU.
- Skomplikowane, aby skonfigurować i zrozumieć.
Który powinieneś wybrać?
Wybrany protokół będzie zależeć od twoich konkretnych potrzeb.
Http: W przypadku HTTP/2 można teraz mieć dwukierunkową komunikację między klientem a serwerem. W zależności od aplikacji możesz nie potrzebować pełnej komunikacji dupleksowej, a coś takiego jak SSE będzie więcej niż wystarczające. W tym artykule odkryliśmy również, że WebSockets i GRPC są zależne od HTTP, podczas gdy WebRTC wymaga innego kanału do sygnalizacji. To’s Warto najpierw zbadać, czy HTTP rozwiązuje potrzeby aplikacji przed zagłębieniem się w te inne protokoły.
WebSockets najlepiej nadają się do aplikacji w czasie rzeczywistym, które wymagają dwukierunkowej komunikacji, takich jak aplikacje do czatu. Są również stosunkowo łatwe do skonfigurowania i użycia. Jednak WebSockets nie są tak wydajne jak GRPC lub WEBRTC i nie są odpowiednio dostosowane do aplikacji, które muszą wysłać wiele danych.
GRPC jest bardziej wydajnym protokołem niż w WebSockets i lepiej nadaje się do aplikacji, które muszą wysłać wiele danych. GRPC jest jednak bardziej skomplikowane w konfiguracji i użyciu niż WebSockets. Jeśli chcesz wykonać wiele małych połączeń API, GRPC jest dobrym wyborem. Lub, gdy implementujesz mikrousługi z różnymi językami programowania, które muszą się komunikować, a następnie GRPC’S serializowane dane strukturalne i generowanie kodu zaoszczędzą dużo czasu. To’S warto również zauważyć, że możesz’T łatwo użyj GRPC z przeglądarki. W tym celu potrzebujesz dedykowanego proxy w backend, który tłumaczy połączenia – patrz GRPC -WEB.
WEBRTC jest najbardziej wydajnym protokołem komunikacji w czasie rzeczywistym z niskim opóźnieniem między przeglądarkami i urządzeniami, i jest odpowiedni do aplikacji, które muszą wysłać wiele danych. WebRTC zapewnia również łatwy w użyciu interfejs API bezpośrednio dostępny w przeglądarce, ułatwiając udostępnianie aparatu, audio, ekranu lub innych plików. Jednak WEBRTC może być skomplikowane do skonfigurowania i użycia, ponieważ wymaga wykonania sygnalizacji i utrzymania serwera skrętu i ogłuszenia.
Wniosek
Przyszłość zobaczy więcej protokołów, zmian i dalszych ulepszeń. HTTP/3 jest już wydany, a także nowy protokół komunikacyjny o nazwie WebTransport, potencjalny wymiana WebSockets.
Mamy nadzieję, że ten artykuł uznałeś za przydatny i że pomoże ci podjąć świadomą decyzję. Jeśli chcesz kontynuować dyskusję, skontaktuj się z nami na Twitterze lub LinkedIn.
WEBRTC vs HLS: Porównanie protokołów strumieniowych
Ten post na blogu porównuje WebRTC i HLS, dwa z najpopularniejszych protokołów strumieniowych. Bada zalety i wady każdego protokołu i bada jego wnioski. Ponadto post zapewnia przegląd lepszy do przesyłania strumieniowego, umożliwiając czytelnikom wybór odpowiedniej technologii dla ich potrzeb.
ASHIK TS
22 lutego 2023 r
W dzisiejszej erze cyfrowej protokoły strumieniowe stały się niezbędne do konsumowania i udostępniania mediów. Od strumieni na żywo po wideo na żądanie, protokoły przesyłania strumieniowego umożliwiły nam dostęp do treści w dowolnym miejscu, w dowolnym miejscu. Ale przy tak wielu dostępnych opcjach, wiedza o najlepszych dla twoich potrzeb może zająć trochę czasu i wysiłku. W tym artykule przyjrzymy się dwóm najpopularniejszym protokołom strumieniowym: WebRTC i HLS, porównaj je i pomożesz podjąć świadomą decyzję.
Co to jest WebRTC?
WebRTC to bezpłatny i otwarty protokół opracowany przez W3C. Umożliwia komunikację w czasie rzeczywistym, taką jak połączenia głosowe i wideo, wizycie online i czat. WEBRTC stał się ostatnio widoczny ze względu na zdolność do dostarczania niskotrzymkowej, wysokiej jakości strumieni wideo i audio.
Zastosowania WebRTC
Oto niektóre z najczęściej stosowanych przypadków użycia WebRTC:
- Połączenia głosowe i wideo: Jednym z najpopularniejszych przypadków użycia dla WebRTC są połączenia głosowe i wideo. Umożliwia komunikację w czasie rzeczywistym i nisko opóźnień między dwoma lub więcej osobami. Firmy szeroko wykorzystują tę funkcję do komunikacji wewnętrznej, współpracy i aplikacji konsumenckich do sieci społecznościowych i randek online.
- Konferencje online: Kolejnym popularnym przypadkiem użycia dla WebRTC jest konferencje online. Umożliwia wielu użytkownikom dołączenie do wirtualnej sali konferencyjnej i interakcje ze sobą za pośrednictwem wideo i audio, a także udostępniać ekrany i dokumenty. Firmy szeroko używają tej funkcji do zdalnych spotkań i prezentacji, a także instytucji edukacyjnych na zajęcia i wykłady online.
- Czat: WebRTC umożliwia również komunikację tekstową w czasie rzeczywistym za pośrednictwem czatu. Ta funkcja może być zintegrowana z różnymi aplikacjami i platformami, takimi jak sieci społecznościowe, gry online i obsługa klienta. Pozwala na natychmiastową komunikację i może być używany do poprawy wrażeń użytkownika w różnych kontekstach.
Co to jest HLS?
HLS (HTTP Live Streaming) to adaptacyjny protokół transmisji strumieniowej opracowanej przez Apple. Jest szeroko stosowany do transmisji na żywo na urządzeniach mobilnych i przeglądarkach komputerowych. HLS jest zaprojektowany do współpracy z protokołem HTTP i można go łatwo zintegrować z istniejącą infrastrukturą opartą na HTTP.
Zastosowania HLS
Oto niektóre z bardziej powszechnych sposobów, w jakie HLS jest używany w dzisiejszych czasach i wieku:
- Przekaz na żywo: HLS jest powszechnie używany do wydarzeń związanych z transmisją na żywo, takich jak sport, koncerty i transmisje informacyjne. Protokół został zaprojektowany do obsługi dużego ruchu i zapewnienia płynnego przesyłania strumieniowego dla widzów. Funkcja adaptacyjnego bitratu pozwala strumieniu dostosować się do połączenia internetowego przeglądarki, zapewniając lepsze wrażenia z oglądania.
- Wideo na żądanie (VOD): HLS jest również powszechnie używany do treści wideo na żądanie (VOD), takich jak filmy, programy telewizyjne i samouczki wideo. Protokół umożliwia łatwą integrację z systemami zarządzania treścią i płynne wrażenia przesyłania strumieniowego dla widza z adaptacyjną transmisją.
- IPTV i OTT: HLS jest również używany w usługach IPTV i Over-the-Top (OTT), takich jak telewizja i usługi telewizji i wideo. Zdolność protokołu do obsługi dużego ruchu i zapewnienia płynnego przesyłania strumieniowego sprawia, że jest to popularny wybór dla tych aplikacji.
- Streaming mobilny: HLS jest również popularny w strumieniowaniu mobilnym, ponieważ jest obsługiwany zarówno na platformach iOS, jak i Android.
- Komunikacja korporacyjna: HLS jest używany na platformach komunikacyjnych przedsiębiorstw, które pozwalają pracownikom przesyłać strumieniowo filmy, udostępnianie ekranów i tworzenie połączeń audio/wideo, ponieważ zapewnia płynne wrażenia ze strumieniowego przesyłania strumieniowego i jest kompatybilny z większością urządzeń.
WEBRTC vs HLS: szczegółowa porównanie
Funkcja | WEBRTC | HLS |
---|---|---|
Obsługa przeglądarki | Chrome, Firefox, Safari, Edge (z wtyczką) | Safari, Chrome, Edge, Firefox (z wtyczką) |
Obsługa urządzenia | Windows, macOS, Linux, iOS, Android | iOS, Android, macOS, Windows |
Obsługa kodeka | VP8, VP9, H.264, godz.265 | H.264, godz.265 |
Czas oczekiwania | Niski | Wysoki |
Bezpieczeństwo | Wysoki | Średni |
Jakość wideo | Wysoki | Wysoki |
Sposób dostawy | Peer-to-peer | Oparte na serwerze |
Skalowalność | Wysoki | Wysoki |
Zgodność | Ograniczony | Szeroki |
Podejmując decyzję, który protokół użyć, ważne jest, aby wziąć pod uwagę takie czynniki, jak opóźnienie, bezpieczeństwo, jakość wideo, metoda dostawy, skalowalność i kompatybilność.
Czas oczekiwania
Jeśli chodzi o opóźnienie, WebRTC ma wyraźną przewagę nad HLS. WebRTC korzysta z komunikacji w czasie rzeczywistym, co oznacza, że wideo jest natychmiast dostarczane do przeglądarki. Z drugiej strony HLS używa mechanizmu buforowania, który opóźnia dostarczanie wideo. W zależności od warunków sieciowych opóźnienie może wynosić od kilku sekund do kilku minut. Te elementy sprawiają, że WebRTC jest bardziej odpowiednie do przypadków użycia, które wymagają niskiego opóźnienia, takie jak czaty wideo na żywo i gry online.
Bezpieczeństwo
Zarówno WebRTC, jak i HLS używają szyfrowania do zabezpieczenia strumieni wideo. Jednak poziom bezpieczeństwa zapewnianego przez każdy protokół jest inny. WebRTC wykorzystuje bezpieczny protokół transportu w czasie rzeczywistym (SRTP) do szyfrowania strumienia wideo, który jest uważany za jedną z najbezpieczniejszych metod szyfrowania. Z drugiej strony HLS używa protokołu HTTP Secure (HTTPS) do szyfrowania strumienia wideo. Podczas gdy HTTPS jest uważany za bezpieczny, SRTP jest mniej bezpieczny. Z tych powodów WEBRTC jest bardziej odpowiednie dla przypadków użycia, które wymagają wysokiego poziomu bezpieczeństwa, takich jak transakcje finansowe i komunikacja rządowa.
Jakość wideo
Zarówno WebRTC, jak i HLS są w stanie dostarczyć wysokiej jakości wideo. Jednak jakość wideo dostarczana przez każdy protokół może się różnić w zależności od warunków sieciowych. WEBRTC używa adaptacyjnego transmisji transmisji transmisji bitratu, który dostosowuje jakość wideo w czasie rzeczywistym w oparciu o warunki sieciowe widza. Oznacza to, że jakość wideo będzie wysoka nawet w sieciach o niskiej przepustowości. Z drugiej strony HLS wykorzystuje wcześniej segmentowy mechanizm dostarczania wideo, który może prowadzić do buforowania i jąkania się w sieciach o niskiej przepustowości. W rezultacie WebRTC jest bardziej odpowiednie dla przypadków użycia, które wymagają wysokiej jakości wideo w sieciach o niskiej przepustowości.
Sposób dostawy
WEBRTC i HLS używają różnych metod dostarczania do przesyłania strumieniowego wideo. WebRTC używa metody dostawy peer-to-peer (P2P), co oznacza, że wideo jest dostarczane bezpośrednio z jednego przeglądarki do drugiego. To zmniejsza ładowanie serwera i zwiększa skalowalność strumienia wideo. Z drugiej strony HLS używa metody dostawy klienta-serwera, co oznacza, że wideo jest dostarczane z serwera do przeglądarki. Może to prowadzić do problemów z skalowalnością, szczególnie w szczycie ruchu ruchu. W rezultacie WebRTC jest bardziej odpowiednie dla przypadków użycia, które wymagają wysokiej skalalności, takich jak wydarzenia na żywo i gry online.
Skalowalność
WEBRTC i HLS mają różne charakterystyki skalowalności. WebRTC używa metody dostawy P2P, która zmniejsza obciążenie serwera i zwiększa skalowalność strumienia wideo. Z drugiej strony HLS używa metody dostawy klienta-serwera, która może prowadzić do problemów z skalowalnością, szczególnie w czasach ruchu szczytowego. W rezultacie WebRTC jest bardziej odpowiednie dla przypadków użycia, które wymagają wysokiej skalalności, takich jak wydarzenia na żywo i gry online.
Zgodność
WEBRTC i HLS mają różne charakterystyki kompatybilności. WEBRTC jest kompatybilny z większością nowoczesnych przeglądarków, w tym Chrome, Firefox i Safari. Nie jest to jednak kompatybilne z Internet Explorer i Edge. Z drugiej strony HLS jest kompatybilny z większością współczesnych przeglądarków, w tym Chrome, Firefox, Safari, Internet Explorer i Edge. Z tego powodu HLS jest bardziej odpowiednia dla przypadków użycia, które wymagają kompatybilności z szerokim zakresem przeglądarek i urządzeń.
WEBRTC vs HLS: Co jest lepsze?
WEBRTC to świetna opcja dla aplikacji strumieniowych w czasie rzeczywistym w czasie rzeczywistym. Jest idealny do użytku, takich jak połączenia głosowe i wideo, wizycie online i czat. Z drugiej strony, HLS jest doskonałą opcją do przesyłania strumieniowego wideo na żywo do dużej publiczności. Jest szczególnie odpowiednie do przypadków użycia, takich jak strumieniowe sporty na żywo, koncerty i inne wydarzenia wymagające wysokiej skalowalności. Zdolność HLS do dostosowywania się do różnych warunków sieciowych sprawia, że jest to popularny wybór treści przesyłania strumieniowego dla widzów na różnych urządzeniach i sieciach.
Ponadto HLS ma lepsze wsparcie w ochronie praw autorskich treści, co czyni go preferowanym wyborem do przesyłania strumieniowego treści premium. Jeśli chodzi o kompatybilność, HLS ma niewielką przewagę nad WebRTC. HLS jest szeroko obsługiwany, co czyni go bardziej wszechstronną opcją przesyłania strumieniowego treści do szerszej publiczności. Jest to jednak kosztem nieco wyższego opóźnienia.
Jeśli głównym celem jest przesyłanie strumieniowe w czasie rzeczywistym i niskiej opóźnień, WebRTC może być Twoją lepszą opcją. W przeciwnym razie, jeśli główny nacisk kładziony jest na skalowalność i kompatybilność, HLS może być lepszym wyborem.
Wniosek
Podsumowując, zarówno WebRTC, jak i HLS mają swoje własne unikalne funkcje i przypadki użycia, które sprawiają, że są odpowiednie dla różnych rodzajów streamingu. WEBRTC najlepiej nadaje się do niskich opóźnień, komunikacji w czasie rzeczywistym, takim jak połączenia głosowe i wideo, wizycie online i czat. Z drugiej strony HLS najlepiej nadaje się do wysokiej jakości przesyłania strumieniowego wcześniej nagranych filmów na szerokiej gamie urządzeń.
FAQ
1. Czy WebRTC używa TCP lub UDP?
WebRTC używa zarówno TCP, jak i UDP w zależności od rodzaju przesyłanych danych. Wykorzystuje TCP do kontrolowania wiadomości i UDP do przesyłania strumieniowego multimediów.
2. Czy YouTube używa HLS?
Tak, YouTube używa HLS (transmisja na żywo HTTP) jako jeden z protokołów strumieniowych do dostarczania filmów dla widzów.
3. Czy WebRTC jest tylko dla przeglądarek?
WEBRTC to przede wszystkim technologia oparta na przeglądarce, ale może być również używana w natywnych aplikacjach za pośrednictwem bibliotek WebRTC.
4. Czy Netflix używa WebRTC?
Nie, Netflix nie używa WebRTC do przesyłania strumieniowego. Korzystają z własnej zastrzeżonej technologii o nazwie Adaptive Streaming nad HTTP (ASOH), która jest oparta na transmisji na żywo HTTP (HLS).