Tworzenie aplikacji klient-serwer za pomocą gRPC

gRPC to nowoczesna platforma RPC open source o wysokiej wydajności, która może działać w dowolnym środowisku. Umożliwia efektywne łączenie usług w centrach danych i między nimi dzięki solidnej obsłudze systemu równoważenia obciążenia, śledzenia, kontroli stanu i uwierzytelniania. Metoda ta sprawdza się również w przypadku przetwarzania danych rozproszonych do łączenia urządzeń, aplikacji mobilnych i przeglądarek z usługami backendu. Dokumentację znajdziesz na oficjalnej stronie gRPC i uzyskasz wsparcie od społeczności open source. W tym przewodniku znajdziesz rozwiązania do tworzenia aplikacji na Androida za pomocą gRPC.

grpc.io to oficjalna strona projektu gRPC. Więcej informacji o działaniu gRPC znajdziesz w artykule Co to jest gRPC? i pojęcia gRPC. Aby dowiedzieć się, jak używać gRPC w aplikacji na Androida, zapoznaj się z przykładem Hello World w krótkim wprowadzeniu do Javy na Androida w gRPC. Kilka innych przykładów gRPC na Androida znajdziesz na stronie GitHub.

Funkcje

Proste w obsłudze rozmowy
Ponieważ jest to RPC, model programowania to wywołania procedury: sieciowy aspekt technologii jest wyodrębniony od kodu aplikacji, przez co wydaje się, że jest to normalne wywołanie funkcji w procesie. Interakcja klient-serwer nie będzie ograniczona semantyką metod zasobów HTTP (takich jak GET, PUT, POST i DELETE). W porównaniu z interfejsami API REST Twoja implementacja wygląda bardziej naturalnie i nie wymaga obsługi metadanych protokołu HTTP.
Wydajna transmisja sieciowa za pomocą protokołu HTTP/2
Przesyłanie danych z urządzeń mobilnych na serwer backendu może być procesem bardzo obciążającym zasoby. Częste łączenie urządzenia mobilnego z usługą w chmurze przy użyciu standardowego protokołu HTTP/1.1 może wyczerpać baterię, zwiększyć opóźnienie i uniemożliwić innym aplikacjom łączenie się. Domyślnie protokół gRPC działa na górze protokołu HTTP/2, co wprowadza dwukierunkowe strumieniowanie, kontrolę przepływu, kompresję nagłówków i możliwość wysyłania żądań multipleksu w pojedynczym połączeniu TCP/IP. W efekcie gRPC może ograniczyć wykorzystanie zasobów, co skraca czas odpowiedzi między aplikacją a usługą w chmurze, pozwala ograniczyć wykorzystanie sieci i dłuższy czas pracy na baterii przez klientów korzystających z urządzeń mobilnych.
Wbudowana obsługa strumieniowego przesyłania danych
Usługa gRPC została od samego początku zaprojektowana z myślą o obsłudze dwukierunkowego przesyłania strumieniowego w trybie pełnego dupleksu. Strumieniowe przesyłanie danych sprawia, że żądania i odpowiedzi mogą mieć dowolnie duży rozmiar, na przykład w przypadku operacji, które wymagają przesłania lub pobrania dużej ilości informacji. W przypadku strumieniowania klient i serwer mogą jednocześnie odczytywać i zapisywać wiadomości oraz subskrybować siebie nawzajem bez identyfikatorów zasobów śledzenia. Dzięki temu implementacja aplikacji jest bardziej elastyczna.
Płynna integracja z buforem protokołu
gRPC wykorzystuje bufory protokołów (Protobuf) jako metodę Serializacji/deserializacji ze zoptymalizowaną pod kątem Androida wtyczki do generowania kodu (Protobuf Java Lite). W porównaniu z formatem tekstowym (takim jak JSON) Protobuf zapewnia bardziej wydajną wymianę danych pod względem szybkości porządkowania i rozmiaru kodu, co sprawia, że nadaje się do stosowania w środowiskach mobilnych. Poza tym zwięzła składnia definicji wiadomości/usługi w Protobuf znacznie ułatwia też zdefiniowanie modelu danych i protokołów aplikacji na potrzeby aplikacji.

Informacje o wykorzystaniu

Zgodnie z samouczkiem dotyczącym podstaw gRPC – Java na Androidzie użycie gRPC dla aplikacji na Androida składa się z 4 kroków:

  • Definiowanie usług RPC za pomocą buforów protokołów i generowanie interfejsów klienta gRPC.
  • Utwórz kanał służący jako medium do wywołań RPC między klientem a serwerem.
  • Utwórz obiekt Stub klienta jako punkt wejścia do inicjowania wywołań RPC po stronie klienta.
  • Wykonuj wywołania RPC na serwerze zdalnym w taki sam sposób jak w przypadku wywołań procedur lokalnych.

Dla celów demonstracyjnych w podanym przykładzie bajty są przesyłane w postaci zwykłego tekstu. Jednak w środowisku produkcyjnym aplikacja powinna zawsze szyfrować dane sieciowe. gRPC zapewnia obsługę szyfrowania SSL/TLS oraz wymianę tokenów OAuth (OAuth2 z usługami Google) na potrzeby uwierzytelniania. Więcej informacji znajdziesz w artykułach na temat protokołu TLS na urządzeniach z Androidem i korzystania z protokołu OAuth2.

Transport

gRPC udostępnia 2 implementacje protokołu dla klientów na Androida: OkHttp i Cronet.

Wybierz transport (zaawansowane)

  • OkHttp
    OkHttp to niewielki stos sieciowy zaprojektowany do użytku na urządzeniach mobilnych. To domyślny transport gRPC używany w środowisku Androida. Aby użyć OkHttp jako transportu gRPC w aplikacji, utwórz kanał za pomocą funkcji AndroidChannelBuilder, która zapakuje OkHttpChannelBuilder. Następnie zarejestruje monitor sieci w systemie operacyjnym Android, aby szybko reagować na zmiany w sieci. Przykład użycia znajdziesz w narzędziu gRPC-Java AndroidChannelBuilder.
  • Cronet (funkcja eksperymentalna)
    Cronet to stos Networking w Chromium, który jest dostępny jako biblioteka na urządzenia mobilne. Oferuje solidną obsługę sieci i najnowocześniejszy protokół QUIC, dzięki czemu może być szczególnie skuteczny w niestabilnych środowiskach sieciowych. Więcej informacji o aplikacji Cronet znajdziesz w artykule Wykonywanie operacji sieciowych za pomocą Cronet. Aby użyć Cronet jako transportu gRPC w aplikacji, utwórz kanał za pomocą CronetChannelBuilder. Przykład użycia podano w narzędziu gRPC-Java Cronet Transport.

Ogólnie rzecz biorąc, zalecamy używanie aplikacji Cronet, która jest kierowana na najnowsze wersje pakietu SDK, ponieważ oferuje ona wydajniejszy stos sieciowy. Wadą korzystania z cronet jest zwiększenie rozmiaru pliku APK, ponieważ dodanie binarnej zależności Cronet zwiększy rozmiar aplikacji o ponad 1 MB, podczas gdy w przypadku OkHttp zwiększy się rozmiar około 100 KB. Począwszy od GMSCore w wersji 10 możesz załadować aktualną kopię aplikacji Cronet z Usług Google Play. Rozmiar pliku APK nie musi już być problemem, chociaż urządzenia bez zainstalowanej najnowszej wersji GMSCore mogą nadal preferować korzystanie z OkHttp.