Zrozumienie architektury i systemu WhatsApp
Streszczenie
Ciągłe szyfrowanie WhatsApp może nie być tak chroniące w prywatności, jak można by się spodziewać, pomimo bezpieczeństwa teoretycznego. W tym artykule bada architekturę i projekt systemu WhatsApp, rzucając światło na swoje wewnętrzne działanie.
Kluczowe punkty
1. RoxDavirox/Socket-WhatsApp: Ten zatwierdzenie nie należy do żadnego oddziału w tym repozytorium i może pochodzić z widelca poza repozytorium.
2. Nazwa już używana: Tworzenie gałęzi o nazwie, która już istnieje jako tag może prowadzić do nieoczekiwanego zachowania. Użytkownik jest poproszony o potwierdzenie tworzenia oddziału.
3. Uruchomienie pulpitu Github: Jeśli nic się nie stanie, użytkownik zaleca się pobranie pulpitu Github i spróbowanie ponownie.
4. Uruchomienie Xcode: Jeśli nic się nie stanie, użytkownik zaleca się pobranie Xcode i spróbowania ponownie.
5. Uruchomienie kodu Visual Studio: Użytkownik jest informowany, że ich kodespace otworzy się, gdy będzie gotowy. Jeśli wystąpił problem z przygotowaniem kody, zachęca się ich do ponownego spróbowania.
6. Najnowsze zatwierdzenie: Wyświetlane są szczegóły najnowszego zobowiązania do repozytorium.
7. GIT Stats: Przegląd statystyki GIT dla repozytorium.
8. Akta: Pokazane są informacje o plikach w repozytorium, w tym brak załadowania najnowszych informacji o zatwierdzeniu.
9. Readme.MD: Krótki opis biblioteki Baileys, która jest czystym węzłem.JS Implementacja interfejsu API WhatsApp bez potrzeby selenu lub innej przeglądarki. Wykorzystuje WebSocket bezpośrednio do interfejsu z WhatsApp Web.
10. Wykorzystanie Baileys: Podane są instrukcje dotyczące instalacji Baileys z NPM i importowania do kodu.
Pytania i odpowiedzi:
1. Jaki jest cel zatwierdzenia RoxDavirox/Socket-WhatsApp?
Cel tego zatwierdzenia jest niejasny, ponieważ nie należy do żadnego oddziału w repozytorium i może pochodzić z widelca poza repozytorium.
2. Jaki potencjalny problem może pojawić się podczas tworzenia gałęzi o nazwie, która już istnieje jako znacznik?
Tworzenie gałęzi o nazwie, która już istnieje jako tag może powodować nieoczekiwane zachowanie. Wskazane jest potwierdzenie przed utworzeniem takiej gałęzi.
3. Co należy zrobić, jeśli nic się nie stanie podczas uruchamiania pulpitu Github?
Jeśli nic się nie dzieje podczas uruchamiania pulpitu Github, zaleca się go pobrać i spróbować ponownie.
4. Co należy zrobić, jeśli nic się nie stanie podczas uruchamiania Xcode?
Jeśli nic się nie dzieje podczas uruchamiania Xcode, sugeruje się go pobrać i próbować ponownie.
5. Jakie działania należy podjąć, jeśli wystąpił problem przygotowania kody podczas uruchamiania kodu Visual Studio?
Jeśli wystąpił problem przygotowywania kody podczas uruchamiania kodu Visual Studio, najlepiej spróbować ponownie.
6. Jakie informacje zawiera sekcja „najnowsze zatwierdzenie”?
W sekcji „Najnowsze zatwierdzenie” wyświetla szczegóły najnowszego zatwierdzenia w repozytorium.
7. Co pokazuje sekcja „GIT Stats”?
Sekcja „GIT Stats” zawiera przegląd statystyki GIT dla repozytorium.
8. Jakie informacje są przedstawione w sekcji „Pliki”?
Sekcja „Pliki” pokazuje informacje o plikach w repozytorium, w tym wszelkie awarie załadowania najnowszych informacji o zatwierdzeniu.
9. Co to jest Baileys?
Baileys to czysty węzeł.Wdrożenie JS interfejsu API WhatsApp WhatsApp. Umożliwia bezpośrednią komunikację z WhatsApp Web za pomocą WebSocket, bez potrzeby przeglądarki takiej jak selen.
10. Jak można zainstalować i importować Baileys?
Baileys można zainstalować z NPM przy użyciu polecenia „NPM Instaluj Github: AdiWajshing/Baileys.„Można go następnie zaimportować do kodu za pomocą” const whatsappweb = wymaganie („Baileys”).”
Osobiste doświadczenie i zalecenia:
Z mojego osobistego doświadczenia zrozumienie architektury i projektowania systemu WhatsApp było kluczowe w opracowywaniu aplikacji, które integrują się z platformą. Baileys, będąc czystym węzłem.Implementacja JS, znacznie ułatwiła interakcję z WhatsApp Web bez potrzeby narzędzia do automatyzacji przeglądarki, takich jak Selenium. Gorąco polecam wykorzystanie takich bibliotek dla każdego, kto chce budować aplikacje oprócz infrastruktury WhatsApp.
Zrozumienie architektury i systemu Whatsapp System
Podczas gdy szyfrowanie kompleksowe może sprawić, że teoretycznie poczujesz się bezpiecznie. W praktyce end-to-end szyfrowanie ISn’T tak chroniące prywatność, jak można by się spodziewać.
RoxDavirox/Socket-Whatsapp
Ten zatwierdzenie nie należy do żadnego oddziału w tym repozytorium i może należeć do widelca poza repozytorium.
Przełącz gałęzie/tagi
Tagi gałęzi
Nie mogło załadować gałęzi
Nic do pokazania
Nie mogło załadować tagów
Nic do pokazania
Nazwa już używana
Tag już istnieje z podaną nazwą gałęzi. Wiele poleceń git akceptuje nazwy tagów i gałęzi, więc tworzenie tej gałęzi może powodować nieoczekiwane zachowanie. Czy na pewno chcesz utworzyć tę gałąź?
Anuluj Utwórz
- Lokalny
- Kodespaces
Https github cli
Użyj git lub kasy z SVN za pomocą adresu URL internetowego.
Pracuj szybko z naszym oficjalnym CLI. Dowiedz się więcej o CLI.
Rejestracja jest wymagana
Zaloguj się, aby korzystać z kodesprzeń.
Uruchamianie pulpitu Github
Jeśli nic się nie stanie, pobierz github komputer i spróbuj ponownie.
Uruchamianie pulpitu Github
Jeśli nic się nie stanie, pobierz github komputer i spróbuj ponownie.
Uruchamianie Xcode
Jeśli nic się nie stanie, pobierz Xcode i spróbuj ponownie.
Uruchamianie kodu Visual Studio
Twój kodespace otworzy się po gotowaniu.
Wystąpił problem z przygotowaniem kody.
Najnowsze zatwierdzenie
GIT Stats
Akta
Nie udało się załadować najnowszych informacji o zatwierdzeniu.
Najnowsza wiadomość o zatwierdzeniu
Popełnić czas
Readme.MD
Odwrotne inżynierii interfejsu WhatsApp Web API w czystym węźle.JS. Baileys nie wymaga selenu ani żadnej innej przeglądarki, aby interfejs z WhatsApp Web, robi to bezpośrednio za pomocą WebSocket.
Dziękujemy Sigalor za napisanie przewodnika po inżynierii odwrotnej WhatsApp Web i podziękowania dla Rhymen za Iść Ponowna implementacja.
Baileys jest bardzo łatwy w użyciu:
- Zainstaluj z NPM za pomocą NPM instaluj github: AdiWajshing/Baileys
- Następnie zaimportuj kod za pomocą
const Whatsappweb = wymagać(„Baileys”)
pozwalać klient = nowy Whatsappweb() klient.łączyć()
klient.Handlery.Onconnected = () => / * Gdy jesteś pomyślnie uwierzytelniony za pomocą serwerów WhatsApp */ >
klient.Handlery.OnunreadMessage = (wiadomość) => / * zadzwonił, gdy masz oczekującą wiadomość lub otrzymasz nową wiadomość */ >
klient.Handlery.Oneerror = (błąd) => / * wywołane, gdy wystąpił błąd */ >
klient.Handlery.obecność = (ID, obecność) => / * zadzwonił po otrzymaniu aktualizacji czyjejś obecności */ >
klient.Handlery.ondisconnect = () => / * zadzwonił, gdy Internet zostanie odłączony */ >
klient.Handlery.OnunreadMessage = (M) => const typ wiadomości = klient.getMessageType(M.wiadomość) // Uzyskaj rodzaj wiadomości - tekst, obraz, wideo >
klient.Handlery.OnunreadMessage = (M) => const typ wiadomości = klient.getMessageType(M.wiadomość) // Uzyskaj rodzaj wiadomości - tekst, obraz, wideo // jeśli wiadomość nie jest wiadomość tekstową Jeśli (typ wiadomości !== Whatsappweb.Typ wiadomości.tekst && typ wiadomości !== Whatsappweb.Typ wiadomości.ExtendedText) klient.Dekodemediamessage(M.wiadomość, "Nazwa pliku") // rozszerzenie stosowane automatycznie .Następnie (Meta => konsola.dziennik(M.klucz.RemoteJid + „Wysłano media, zapisane na:” + Meta.Nazwa pliku)) .złapać (błądzić => konsola.dziennik(„Błąd w dekodowaniu komunikatu:” + błądzić)) > >
klient.Wyślij wiadomość tekstową(ID, txtMessage)
Lub jeśli chcesz zacytować kolejną wiadomość:
klient.Wyślij wiadomość tekstową(ID, txtMessage, CytedMessage)
klient.SendMediamessage(ID, MediaBuffer, typ mediów, informacje)
- Miniaturę można generować automatycznie dla obrazów i naklejek.
- MediaBuffer to tylko bufor zawierający zawartość mediów, które chcesz wysłać
- MediaType reprezentuje rodzaj wysyłanej wiadomości. Może to być jedna z następujących czynności:
[[[ Whatsappweb.Typ wiadomości.obraz, // wiadomość obrazu Whatsappweb.Typ wiadomości.wideo, // Wiadomość wideo Whatsappweb.Typ wiadomości.audio, // wiadomość audio Whatsappweb.Typ wiadomości.naklejka // wiadomość naklejki ]
informacje = podpis: "Witam!", // podpis do wysyłania z mediami (nie można jednak wysłać naklejkami) Miniaturka: zero, /* musi być podstawą 64 zakodowaną JPEG, jeśli chcesz wysłać niestandardowy kciuk, lub ustaw na Null, jeśli nie chcesz wysyłać miniatury. Nie wprowadzaj tego pola, jeśli chcesz automatycznie wygenerować kciuk */ Mymetyp: „Aplikacja/PDF”, /* Określ typ multimediów (opcjonalnie dla wszystkich typów mediów, z wyjątkiem dokumentów), Dla plików PDF => Ustaw na „Aplikacja/PDF”, Dla plików txt => Ustaw na „Applic/TXT” itp. */ Gif: PRAWDA // dotyczy tylko wiadomości wideo, jeśli wideo powinno być traktowane jako GIF >
klient.sendReadRecePiPt(ID, ID wiadomości)
klient.aktualizacja(ID, obecność)
To pozwala osobie z id. gdzie obecność może być jednym z poniższych:
statyczny Obecność = dostępny: "dostępny", // "online" niedostępne: "niedostępne", // offline uspokajający: "uspokajający", // ”pisanie. " nagranie: "nagranie", // „Nagrywanie. " Zatrzymany: „Zatrzymany” // Nie mam pojęcia >
const AuthJson = klient.base64encodedauthinfo()
const AuthJson = JSON.analizować( fs.ReadfileSync(„Auth_info.JSON ") ) klient.Zaloguj sie(AuthJson)
klient.Isonwhatsapp („[countryCode] [Some10digitnumber] @S.WhatsApp.internet") .Następnie ((istnieje, ID) => Jeśli (istnieje) konsola.dziennik(ID + „Jest na WhatsApp”) > w przeciwnym razie konsola.dziennik(ID + „Nie ma na WhatsApp :(”) > >)
Sprawdź i uruchom przykład.JS, aby zobaczyć przykładowe użycie wszystkich tych funkcji. Aby uruchomić przykładowy skrypt, pobierz lub sklonuj repozytorium, a następnie wpisz następujące w terminalu:
- CD ścieżka/do/baileys/przykład
- Przykład węzła.JS
Nie jestem w żaden sposób powiązany z WhatsApp. Zostało to napisane do celów edukacyjnych. Używać według własnego uznania.
Zrozumienie architektury i systemu WhatsApp
Czy kiedykolwiek zastanawiałeś się, jak działa WhatsApp? My’VE zbadał projekt systemu wysokiego poziomu i architekturę WhatsApp’technologia S. Zanurzaj się, aby zobaczyć, czego się nauczyliśmy.
Tag typu treści
Spis treści
Która aplikacja ma ponad 2.5 miliardów aktywnych użytkowników, ponad 5 miliardów pobrań i jest najpopularniejszą aplikacją w ponad 100 krajach?
Wskazówka: sprawdź tytuł artykułu.
Tak to’S racja. WhatsApp to najpopularniejsza usługa przesyłania wiadomości na świecie. Według Marka Zuckerberga, ponad 100 miliardów wiadomości jest wysyłanych codziennie przez WhatsApp.
Z takim niemal astronomicznym ruchem można’T Pomóż, ale zastanawiam się, jak działa WhatsApp – jego projekt systemu, architektura serwera, technologia . Jak obsługuje tak wiele współbieżnych użytkowników i wiadomości? Jakie frameworki i języki programowania umożliwiają tego rodzaju skalę? Jak zapewnić bezpieczeństwo wszystkich tych danych? Tak dużo pytań!
W tym artykule zamierzamy głęboko zanurzyć się w WhatsApp’architektura i projektowanie systemu. My’odpowiedzieć na wszystkie wyżej wymienione pytania i więcej.
Jeśli ty’VE kiedykolwiek zastanawiałem się nad najlepszym psem w świecie aplikacji czatu, czytaj dalej.
Zastrzeżenie: Przeszkodziliśmy Internet, aby zebrać każdy zasob. Zgodnie z naszą najlepszą wiedzą, ta informacja jest dokładna. Jednak ponieważ firmy często aktualizują swój stos techniczny, informacje te mogą ulec zmianie.
Stos technologiczny front-end WhatsApp
Pozwalać’zacznij od frontend i przejdź do sprzętu na zapleczu.
Pierwszą częścią projektu systemu WhatsApp, z którą interakcja użytkownika jest aplikacja mobilna lub internetowa. WhatsApp obsługuje prawie wszystkie platformy. Ma aplikację na iOS, aplikację na Androida, aplikację komputerową, aplikację internetową i aplikację Windows Phone. Do 2017 roku możesz nawet użyć WhatsApp na jeżynce.
Przy tak wielu obsługiwanych platformach, być może odgadłeś, że WhatsApp byłby aplikacją hybrydową. Ale w rzeczywistości’S nie. W rzeczywistości zbudowali natywną aplikację dla każdej platformy. Oto lista wszystkich obsługiwanych platform z językiem front-end, które były używane do budowy każdego z nich:
Jak rozmawiają whatsapp na czacie lokalnie
Oprócz samego języka programowania kolejną ważną technologią, której WhatsApp używa na frontendie, jest baza danych SQLITE. SQLite to samodzielna, samodzielna, relacyjna baza danych, która ma być osadzona w aplikacjach-co oznacza, że żyje na twoim urządzeniu. WhatsApp używa go do przechowywania rozmów. Ponieważ marnotrawstwem zasobów byłoby pobieranie wszystkich wiadomości z chmury za każdym razem, gdy otwierasz aplikację, WhatsApp decyduje się na przechowywanie wiadomości lokalnie. W rzeczywistości WhatsApp przechowuje tylko wiadomości, dopóki nie zostaną otrzymane, w którym to momencie zostaną usunięte.
Które protokoły przesyłania wiadomości używa WhatsApp?
WhatsApp używa wysoce zmodyfikowanej wersji XMPP na serwerze Ejabberd (więcej o tym później), aby komunikować się z klientami.
XMPP na kliencie otwiera gniazdo SSL na serwery WhatsApp. Wszystkie wysłane wiadomości są w kolejce na serwerach, dopóki klient nie otworzy lub nie połączy się z tym gniazdem, aby odzyskać wiadomości. Po pomyślnym odzyskaniu wiadomości przez klienta, status sukcesu jest odesłany z powrotem na serwer WhatsApp. Serwer następnie przekazuje ten status oryginalnego nadawcy; poinformowanie ich, że wiadomość została odebrana przez dodanie “Znak wyboru” ikona obok pomyślnie wysłanej wiadomości.
Należy pamiętać, że chociaż XMPP jest jednym z najpopularniejszych protokołów wiadomości do aplikacji czatu, zdecydowanie nie jest jedyną opcją wyboru protokołu przesyłania wiadomości.
Technologia szyfrowania WhatsApp
WhatsApp korzysta z szyfrowania odległości do końca. Idealnie, oznacza to, że tylko oryginalny nadawca i prawdziwy odbiorca wiadomości mogą odczytać wiadomość w prostym tekście.
Po wysyłaniu wiadomości jest szyfrowana za pomocą określonego protokołu szyfrowania (więcej o tym następnym). WhatsApp następnie przechowuje tę zaszyfrowaną wiadomość na swoich serwerach, aż’S dostarczone do odbiorcy. Po dostarczeniu urządzenie odbiorcy odszyfrowuje wiadomość z powrotem do czytelnej, zwykłej wiadomości za pomocą unikalnego klucza kryptograficznego. W całym tym procesie WhatsApp nigdy nie zna treści Twojej wiadomości.
WhatsApp’Technologia szyfrowania S nazywana jest protokołem szyfrowania sygnałów, który został opracowany przez szepty otwartego systemu jako nowoczesny, silny protokół szyfrowania dla asynchronicznych systemów przesyłania wiadomości.
Podczas gdy szyfrowanie kompleksowe może sprawić, że teoretycznie poczujesz się bezpiecznie. W praktyce end-to-end szyfrowanie ISn’T tak chroniące prywatność, jak można by się spodziewać.
WhatsApp Back-end Tech Stack
Pozwalać’s przejdź do backend.
Zgodnie z naszą najlepszą wiedzą obecny projekt systemu zaplecza WhatsApp wygląda tak:
- Erlang jest głównym językiem programowania
- FreeBSD to system operacyjny
- Ejabberd to serwer aplikacji XMPP
- BELKA jest wirtualną maszyną opartą na Erlang
- Mnesia to ich baza danych oparta na Erlang
- YAWS to ich multimedialny serwer WWW
Pozwalać’Swiej niektóre z bardziej interesujących aspektów WhatsApp’S. Architektura zaplecza:
Erlang
Wybór języka programowania WhatsApp jest w dużej mierze, co pozwala na działanie na tak kolosalną skalę.
Erlang to funkcjonalny język programowania, który jest zorientowany na budowanie jednoczesnych, skalowalnych i niezawodnych systemów. Wykorzystuje model oparty na procesie o nazwie “Model aktora” w którym małe, izolowane procesy komunikują się ze sobą za pośrednictwem wiadomości. Procesy te mogą tworzyć nowe procesy, wysyłać wiadomości i modyfikować ich stan w odpowiedzi na otrzymywanie wiadomości.
Jego właściwość oparta na procesie daje Erlang niezwykle wysoką współbieżność, skalowalność i niezawodność.
Procesy te mogą również komunikować się z procesami poza rdzeniem, na którym działa. Ułatwia to skalowanie systemu poziomo (przez dodanie większej liczby maszyn) lub pionowo (dodając więcej rdzeni). Wreszcie, ponieważ procesy mogą się ze sobą komunikować i, co ważniejsze, ponowne uruchomienie, to’S łatwe do zbudowania systemów samoleczenia. Jeśli błąd zawiedzie proces, inny proces może go ponownie uruchomić.
FreeBSD
Ciekawym wyborem technicznym założycieli WhatsApp było wybranie FreeBSD jako system operacyjny zamiast bardziej używanego systemu (takiego jak Linux).
Brian Acton, jeden ze współzałożycieli WhatsApp, powiedział to w wywiadzie dla Wired o tej decyzji:
“Linux jest bestią złożoności. FreeBSD ma tę zaletę, że jest pojedynczą dystrybucją z wyjątkowo dobrym kolekcją Ports.”
Ponadto, jeśli chodzi o surową wydajność, szczególnie w odniesieniu do obciążenia systemem na pakiet, żaden inny system operacyjny nie może pokonać FreeBSD.
Jednak, jeśli chodzi o to, prawdziwym powodem, dla którego postanowili użyć FreeBSD, jest prawdopodobnie to, że obaj współzałożyciele mieli długą historię pracy z nim w Yahoo!.
Ejabberd
Ejabberd to serwer XMPP z otwartym poziomem, który jest napisany w Erlang. WhatsApp używa zmodyfikowanej wersji XMPP jako protokołu do obsługi dostarczania wiadomości. Nawet serwer Ejabberd, którego używa WhatsApp, jest mocno dostosowany do optymalizacji dla wydajności serwera.
Co’S CEL EJABBERD?
Cóż, obsługuje routing wiadomości, dostarczalność i ogólne aspekty komunikatów informacyjnych aplikacji. Cechy Ejabberd obejmują:
- Wiadomości jeden na jednego
- Czat grupowy
- Przechowywanie i przekazywanie wiadomości offline
- Lista kontaktowa i obecność
Mnesia
Aby przechowywać dane i komunikaty tymczasowe, WhatsApp korzysta z rozproszonego DBM (system zarządzania bazą danych) o nazwie Mnesia. Ten DBMS zapewnia korzyści, że wiele tradycyjnych baz danych don’T takie jak:
- Wyszukiwanie klucza/wartości w czasie rzeczywistym
- Wysoka tolerancja błędów
- Dynamiczna rekonfiguracja
- Złożone obiekty
Mnesia jest również jedynym DBMS’S napisane w Erlang. To samo w sobie jest korzyścią, ponieważ nie ma różnic struktury danych między erlangiem w aplikacji a erlang w DBMS. Kodowanie jest zatem szybsze i bardziej jawne.
BELKA
Wiązka, skrót “Bogdan’Smutka erlang abstrakcyjna”, to maszyna wirtualna, która kompiluje i wykonuje kod źródłowy Erlang. Belka została zaprojektowana specjalnie dla wysoce współbieżnych aplikacji – idealna dla WhatsApp’s przypadek użycia. BELKA’S Tajny sos to lekkie procesy, które Don’t Udostępniaj pamięć i są zarządzane przez harmonogram. Te harmonogramy mogą zarządzać milionami procesów w wielu rdzeniach. To sprawia, że wiązka jest wysoce skalowalna i odporna na awarie, takie jak te spowodowane dużym ruchem, aktualizacjami systemu i przerwami sieciowymi.
Beam jest tak ważny dla projektu systemu WhatsApp, że zespół WhatsApp opublikował wiele łatek i poprawek do podstawowego kodu źródłowego.
FRAMBEZJA
Yaws (kolejny serwer WWW) to serwer WWW oparty na Erlang, który jest idealny do treści dynamicznej. WhatsApp używa yaws do przechowywania danych multimedialnych. YAWS sam wykorzystuje WebSockets HTML5, które upraszczają dwukierunkową komunikację poprzez ustanowienie niezawodnego i szybkiego połączenia między serwerem a aplikacją. Dzięki zastosowaniu tej technologii WhatsApp jest w stanie wysyłać i odbierać dane multimedialne na miliardach urządzeń – w czasie rzeczywistym w czasie rzeczywistym.
Komponenty sprzętowe WhatsApp
W 2017 roku, cztery lata po przejęciu przez Facebook, WhatsApp został zdejmowany z IBM Softlayer’S Cloud i sprowadzony do Facebooka’zastrzeżone centra danych.
Wiemy, że w 2014 r. WhatsApp wymagał około 550 serwerów i ponad 11 000 rdzeni, które działały Erlang. Wiemy również, że WhatsApp’S Baza użytkowników była „tylko” około pół miliarda w 2014 r. W porównaniu z ponad 2 miliardami użytkowników, których osiągnął w 2020 r. Mając więc na uwadze te dane, pozwolimy Ci sobie wyobrazić, ile serwerów i rdzenie WhatsApp wymaga teraz. Wyobrażamy sobie, że to dużo.
Schemat architektury WhatsApp
Najłatwiejszy sposób na pełne zrozumienie WhatsApp’Projekt architektury S jest oczywiście poprzez schemat architektury Whatsapp.
Począwszy od lewej strony, mamy wielu różnych klientów (aplikacje mobilne i internetowe), z których każdy hostuje lokalną bazę danych SQLITE do przechowywania rozmów.
Klienci używają WebSockets HTTP do wysyłania i pobierania danych multimedialnych, takich jak obrazy i filmy z serwera WWW YAWS. Ale, jak widać, XMPP służy do faktycznego wysyłania tych plików i innych wiadomości do innych użytkowników.
Po wysłaniu wiadomości XMPP przechodzi przez serię kroków przedstawionych powyżej. Po pierwsze, zostaje wysłany do WhatsApp’s niestandardowy serwer Ejabberd, który działa na belce i freeBSD. Serwer Ejabberd zapisuje wiadomość w tabeli bazy danych mnesia, w której jest umieszczony w kolejce. Gdy użytkownik odbierający otwiera aplikację, ponownie podłączając się do gniazda, komunikat w kolejce zostaje kierowany przez serwer Ejabberd i dostarczany do odbiorcy. Po potwierdzeniu pomyślnej dostawy komunikat zostanie usunięty z bazy danych Mnesia.
Wniosek
Podczas gdy my’t Nie znam dokładnych specyfikacji WhatsApp’S techniczna architektura i projekt systemu, możemy uzyskać dobry pomysł na podstawie technologii, które WhatsApp stosuje. Mamy nadzieję, że ten artykuł, badanie projektu architektury Whatsapp, odpowiedział na twoje palące pytania. Teraz, gdy zdobyłeś zrozumienie, jak działa serwer WhatsApp, nauczyłeś się, jak wygląda stos technologiczny WhatsApp, a nawet zeskanował schemat architektury WhatsApp. Może czujesz się upoważniony do własnego projektu aplikacji czatu.
Jeśli ty’gotowe do uruchomienia WhatsApp za swoje pieniądze, zapisz się do naszego dewelopera i zacznij budować aplikację czatu za darmo.
Pamiętaj jednak, że wiele technologii w stosie technologii WhatsApp zostało specjalnie wybranych ze względu na ich zdolność do skalowania i radzenia sobie z wyjątkowo wysoką współbieżnością.
Jeśli ty’próbuję zbudować aplikację randkową lub telemedycynę (lub cokolwiek, co się nie dzieje’T potrzebuję prawie całego świata, aby być online w tym samym czasie), możesz nie potrzebować ilości skali, którą robi WhatsApp.
Innymi słowy, stos techniczny WhatsApp, choć idealny dla WhatsApp, może nie być dla Ciebie najlepszym rozwiązaniem. Aby dowiedzieć się o idealnej architekturze i stosie technologii aplikacji czatu, przejdź do tego artykułu.
Jeśli nadal masz pytania dotyczące tego, co jest dla Ciebie odpowiednie, możesz porozmawiać z naszymi ekspertami i zanim zaczniesz budować własną aplikację na czacie.
Po prostu głodny więcej? Oto kilka wspaniałych zasobów, w które można zanurzyć:
- Mit z kompleksowym szyfrowaniem w aplikacjach do przesyłania wiadomości
- Zrozumienie architektury i projektowania systemu aplikacji czatu
- 11 głupich programiści popełniają podczas budowania aplikacji czatu
o autorze
Cosette Cressler to namiętny marketer treści specjalizujący się w SaaS, technologii, karierze, wydajności, przedsiębiorczości i samorozwoju. Pomaga rozwijać firmy o każdej wielkości, tworząc spójne, strawne treści, które przyciągają uwagę i napędza działanie.
Czy WhatsApp używa gniazda
Оjed
Ыы зарегистрир John. С помощю этой страницы ыы сожем оRipееделить, что запросы оRтравляете имено ыы, а не роvert. Почем это могло пRроизойиS?
Эта страница отображается тех слччаях, когда автоматическими системамgz которые наршают усовия исполззования. Страница перестанеura. До этого момента для исползования слжжж Google неоtoś.
Источником запросов может слжить ведоносное по, подкbarów. ыылку заRzy. Еarag ы исползеете общий доступ и интернет, проблема может ыть с компюююеyn с таким жж жж жесом, кк у комszczeюююе000. Обратитеunks к соем системном адинистратору. Подроlit.
Проверка по слову может также появаятьenia, еaсли ы водите сложные ззапры, оind обычно enia оиизи инenia оtoś еами, или же водите заlektora.
XMPP vs WebSocket – który do użytku do aplikacji?
Podczas budowania responsywnej i bogatej w funkcje aplikacji błyskawicznej (IM) od zera jest Twoim celem, najbardziej niepokojącą częścią jest: ustalenie optymalnego protokołu wiadomości. Oferowane wybory (oba) są wyjaśnione w ciągu kilku minut.
Mówiąc to wyraźnie, staraliśmy się wnieść znaczną wiedzę na temat protokołu XMPP vs. WebSocket za pośrednictwem tego postu. Znane z odrębnych cech i obiektów, te dwa protokoły IM mogą utorować ścieżkę do poprawy natychmiastowej komunikacji, gdy idziemy naprzód na czas. Jednakże to’nie jest łatwe do wyboru, ponieważ jedna łatwa ma wyraźne zalety i ograniczenia.
Cele kształcenia
Subskrybuj najnowsze wiadomości
Mukhaddin Beshkov
Zweryfikowany ekspert
Ponad 20 lat wiedza specjalistyczna w zakresie inżynierii systemowej, analizy bezpieczeństwa, architektury rozwiązań. Biegły w systemie operacyjnym (Windows, Linux, UNIX), programowanie (C ++, Python, HTML/CSS/JS, Bash), DB (MySQL, Oracle, MongoDB, PostgreSQL). Wykwalifikowane w skryptach (PowerShell, Python), DevOps (MicroServices, Conteners, CI/CD), tworzenie stron internetowych (węzeł.JS, React, Angular). Udane osiągnięcia w zarządzaniu systemami IT.
Definicja
XMPP – Wszystko o protokole
Używany do XML Fragment Exchange B/W Duo-Client Server, XMPP jest jednym z wczesnych protokołów otwartego standardu w zakresie komunikacji. Ma długą historię ponad 20 lat. Jego skuteczne wdrożenie wymaga obowiązkowego stosowania odpowiedniego wiązania transportu.
W modelu OSI XMPP działa głównie na warstwie aplikacji, która opracowuje wzór strukturalny XML (jego części lub składni). Do transmisji/przekazywania wymaga warstw transportowych’ protokoły’ (HTTP lub TCP) Pomoc.
miXrozciążliwy MEssaging & Prealizacja PRotocol jest głównie używany w rozwoju, które obejmują aplikacje czatu, aplikacje z obiektami takimi jak połączenia głosowe/wideo, natychmiastowe wysyłanie tekstu/mediów i wieloczęściowych połączeń wideo.
Profesjonaliści
Dzięki XMPP masz wiele korzyści, które można cieszyć podczas opracowywania aplikacji IM. Na przykład:
- Jego funkcje bezpieczeństwa cyber.
- Zdecentralizowana architektura zapewnia, że jest dostępna dla wszystkich.
- Oferowane wsparcie techniczne jest niezawodne i skuteczne.
- Jest elastyczny i pozwala użytkownikom końcowym wprowadzać zmiany w procesie transmisji danych zgodnie z potrzebą projektu.
- Pomaga w nawiązaniu trwałego (ciągłego) połączenia.
- Upraszcza serwery komunikacyjne B/W, umożliwiając różnorodnym architekturze przesyłania danych.
- Reaguje bezpośrednio na obecność użytkownika końcowego. Stąd ty’Będę w stanie dowiedzieć się, czy użytkownik końcowy jest online, czy offline.
Cons
Nawet jeśli XMPP przyniesie wiele korzyści, nie jest to bezbłędne. Istnieją pewne oczywiste wady lub wady tego protokołu.
- Brakuje mechanizmu QoS
- Tekstowe strumieniowanie lub komunikacja XML zwiększa koszty operacyjne
- Transport treści często odbywa się bez żadnej synchronizacji
- Czasami obecność i/lub wiadomości błyskawiczne mogą powodować przeciążenie serwera
WebSocket – wszystko o protokole
To’S Protokół IM z czasów nowoczesnych, zezwalający na dane binarne i tekstowe’s przepływ do i fro dla serwerów w dowolnym trwałym kanale.
To’s dwukierunkowy, pełny dupleks i stanowy charakter. To’s używany głównie do aplikacji mobilnej, która wymaga ciągłego połączenia. Nie ma to nic wspólnego z definiowaniem natury i rodzaju danych w transakcji. Potrzebuje wsparcia innych protokołów, aby w pełni wdrożyć zdolność IM w aplikacji czatu.
Profesjonaliści
WebSocket ma na celu wypełnienie luki, którą technologia oparta na HTTP tworzona w transmisji danych. Z czasem zaobserwowano, że było to więcej. Spójrz na kluczowe korzyści, które mogą cieszyć się z WebSockets.
- Utrzymuje komunikację, chyba że serwer lub klient ją zatrzyma
- Nie ma prawie żadnego dopasowania do WebSocket, jeśli chodzi o prędkość. Może przesyłać dane szybciej niż Ajax i HTTP
- Może umożliwić transmisję danych między serwerami pochodzenia
- Jest kompatybilny z wieloma rodzajami platform, takich jak telefon komórkowy, internet i komputer stacjonarny
- Korzystanie z WebSockets jest opłacalne, ponieważ kosztuje jedynie wydatki 2-bajtowe
- Skutecznie naprawia długi problem z głosowaniem
Cons
Pomimo korzyści, WebSocket ma pewne potencjalne wady, które warto zwrócić uwagę. Na przykład:
- Działa tylko wtedy, gdy masz w pełni przeglądarkę zgodną z HTML 5
- Brakuje mu mechanizmu sukcesu podobnego do ajax
- Nie jest możliwe buforowanie pośredników ani krawędzi
- Kiedy WebSocket jest w akcji, programiści będą mieli trudności z wdrożeniem nawet najprostszych statusów HTTP
Porównanie protokołów
Po głębszym zrozumieniu podstawowego znaczenia tych dwóch protokołów, to’czas, aby przejść do szczegółowego porównania WebSocket XMPP V/S. Wybieraliśmy kilka najbardziej niepokojących aspektów, a następnie porównaliśmy ofertę tych dwóch.
Krótka ocena bezpieczeństwa tych dwóch protokołów ma kluczowe znaczenie, ponieważ stosowanie niezabezpieczonego protokołu narazi wszystko na ryzyko. XMPP jest protokołem uzasadnionym czasem i przeszedł wiele zmian i ulepszeń przez te lata aktywacji. Wraz ze zmianą wymagań bezpieczeństwa protokół poprawia swój front bezpieczeństwa. Jest wyposażony w różne warstwy bezpieczeństwa i funkcje.
Gdy XMPP jest aktywowany, tożsamość osobista jest obowiązkowa. Zarówno wiadomości, jak i hosty muszą zostać uwierzytelnione przed wejściem do komunikacji, aby uniknąć ryzyka fałszowania. Mimo że wystarczyło kontrolować zagrożenia spamowe,
XMPP zezwala nawet użytkownikom końcowym dodawanie warstw bezpieczeństwa zgodnie z potrzebą godziny.
Jeśli chodzi o szyfrowanie, XMPP oferuje dwa typy. Pierwsze szyfrowanie powstaje, gdy nawiązuje połączenie i zaczyna się jego uwierzytelnianie. To szyfrowanie kończy się z SASL. Po pomyślnym zbudowaniu połączenia komunikacja klient-serwer jest następnie wspierana przez szyfrowanie TLS.
Jeśli WebSocket’O oferta bezpieczeństwa jest badana dokładnie, będziesz mógł dowiedzieć się, że wymaga odrobiny poprawy. To’s bardzo młody protokół i wymaga większej poprawy i ulepszeń, aby pasowały do tego, co oferuje XMPP. Ale to nie’T oznacza, że brakuje bezpieczeństwa. Oferuje szyfrowanie wystarczająco silne, aby utrzymać złośliwe wtargnięcie.
Podstawowa architektura operacyjna XMPP jest zdecentralizowana, a WebSockets podąża za scentralizowaną architekturą. XMPP opiera się na modelu klient-serwer i zapobiega bezpośredniej interakcji między klientami. WebSockets przybierają pomoc interfejsów API i upewniają się, że klient i serwer ciągle komunikuje się.
- Kompatybilność z innymi protokołami
XMPP jest prymitywnym protokołem i brakuje kompatybilności API. Z drugiej strony WebSocket jest wysoce zoptymalizowany API, co jest rdzeniem lepszej kompatybilności z innymi protokołami.
- Wysyłanie i odbieranie danych binarnych
W WebSockets komunikacja polega na korzystaniu z kodów i wiadomości, uwalnianie użytkowników od problemów z analizowaniem i buforowaniem. To sprawia, że transfer danych jest szybki. XMPP podąża bardzo cienką ścieżką do przesyłania danych binarnych, co czyni wszystko uciążliwym.
WebSocket zajmuje się warstwą transportową’rozszerzalność, podczas gdy XMPP dotyczy warstwy aplikacji’rozszerzalność. To’jest możliwe dodanie ponad 40 protokołów na WebSockets. Ale XMPP ISN’t Ten elastyczny.
Mimo że oba są przydatne do przesyłania danych w czasie rzeczywistym przy Blazing Prędkości, WebSocket przewyższa XMPP na tym froncie ze względu na jego scentralizowany charakter i ciągła komunikacja. XMPP Force Uwierzytelnianie i autoryzacja zarówno serwera, jak i klienta nieco spowalnia jego wydajność.
Przykłady korzystania z XMPP i WebSocket
XMPP jest używany w aplikacjach WhatsApp, GTalk i Grindr i wbudowany w funkcjach czatu. Mówiąc konkretnie, protokół jest w większości preferowany, gdy bezpieczna lub grupowa komunikacja jest główną funkcją aplikacji.
Trello, Slack i Discord to trzy najbardziej znane aplikacje zbudowane za pomocą WebSockets. Jak wiemy, te aplikacje są przeznaczone dla zespołów i zdalnych pracowników. Podsumowując, protokół jest bardziej przydatny w ograniczonych wirtualnych obszarach roboczych, ponieważ używa ciągłego połączenia.
Wniosek – którego protokół do użycia?
WebSocket i XMPP – oba są zaprojektowane do komunikatów informacyjnych. Jednak który należy wybrać, to pytanie, na które należy odpowiedzieć po przejęciu wymagań projektu w kontekście. Jeśli chodzi o nasze zrozumienie, zalecamy korzystanie z WebSockets, gdy należy przenieść wiele danych, a komunikacja powinna pozostać otwarta.
XMPP jest najlepszym wyborem, gdy rozwój wymaga mnóstwa wtyczek, a bezpieczeństwo musi być na najwyższym poziomie. Więc zanim dokonasz wyboru między tymi dwoma, musisz dowiedzieć się, jakie są dokładnie twoje cele rozwoju. Wypracuj to wcześniej, a następnie odpowiednio wybierz protokół. Jednak jedna rzecz jest pewna, że obie dostarczą przy wydajności par.
FAQ
Do czego służy XMPP?
XMPP (rozszerzalny protokół komunikacji i obecności) jest używany do komunikacji w czasie rzeczywistym, takim jak komunikat informacyjny, czat głosowy i wideo oraz informacje o obecności.
Do czego służy WebSocket?
WebSocket jest dobry dla aplikacji internetowych w czasie rzeczywistym, takich jak gry online, aplikacje do czatu i platformy handlowe finansowe.
Czy XMPP można używać z WebSocket?
Tak, XMPP może być używany z WebSocket do ulepszania aplikacji komunikacyjnych w czasie rzeczywistym.
Jakie są zalety WebSocket nad XMPP?
WebSocket ma niższe opóźnienie, lepszą wydajność i może być łatwiejsza do wdrożenia niż XMPP.
Czy WebSocket może być używane do przesyłania plików?
Zgodnie z oficjalną specyfikacją WebSocket nie jest przeznaczony do przesyłania plików. Jednak niektórzy programiści znaleźli sposoby korzystania z WebSocket do przesyłania plików. Repozytorium Github