Client-Server-Anwendungen mit gRPC erstellen

gRPC ist ein modernes, leistungsstarkes Open-Source-RPC-Framework, das in jeder Umgebung ausgeführt werden kann. Es kann Dienste in und über Rechenzentren hinweg effizient verbinden und bietet flexible Unterstützung für Load-Balancing, Tracing, Systemdiagnose und Authentifizierung. Sie eignet sich auch für die letzte Meile des verteilten Computings, um Geräte, mobile Anwendungen und Browser mit Back-End-Diensten zu verbinden. Eine Dokumentation finden Sie auf der offiziellen Website von gRPC. Außerdem erhalten Sie Support von Open-Source-Communities. Dieser Leitfaden zeigt Ihnen Lösungen zum Erstellen von Android-Apps mit gRPC.

gRPC.io ist die offizielle Website für das gRPC-Projekt. Weitere Informationen zur Funktionsweise von gRPC finden Sie unter What is gRPC? und gRPC-Konzepte. Informationen zur Verwendung von gRPC in einer Android-App finden Sie im „Hello World“-Beispiel in der Kurzanleitung für gRPC Android Java. Außerdem finden Sie einige andere gRPC-Android-Beispiele auf GitHub.

Funktionen

Prozeduraufruf leicht gemacht
Da es sich um RPC handelt, handelt es sich bei dem Programmiermodell um Prozeduraufrufe: Der Netzwerkaspekt der Technologie ist vom Anwendungscode abstrahiert, sodass es fast so aussieht, als wäre es ein normaler laufender Funktionsaufruf. Die Client-Server-Interaktion wird nicht durch die Semantik von HTTP-Ressourcenmethoden (z. B. GET, PUT, POST und DELETE) eingeschränkt. Im Vergleich zu REST APIs sieht Ihre Implementierung natürlicher aus, ohne dass HTTP-Protokollmetadaten verarbeitet werden müssen.
Effiziente Netzwerkübertragung mit HTTP/2
Die Übertragung von Daten von Mobilgeräten an einen Back-End-Server kann sehr ressourcenintensiv sein. Bei Verwendung des HTTP/1.1-Standardprotokolls können häufige Verbindungen von einem Mobilgerät mit einem Cloud-Dienst den Akku entladen, die Latenz erhöhen und andere Apps daran hindern, eine Verbindung herzustellen. Standardmäßig wird gRPC auf HTTP/2 ausgeführt, das bidirektionales Streaming, Ablaufsteuerung, Header-Komprimierung und die Möglichkeit zum Multiplexing von Anfragen über eine einzelne TCP/IP-Verbindung ermöglicht. Dies führt dazu, dass gRPC die Ressourcennutzung reduzieren kann. Dies führt zu kürzeren Antwortzeiten zwischen Ihrer App und den in der Cloud ausgeführten Diensten, einer geringeren Netzwerknutzung und einer längeren Akkulaufzeit für Clients, die auf Mobilgeräten ausgeführt werden.
Integrierte Unterstützung für Streaming-Datenaustausch
gRPC wurde von Anfang an mit der HTTP/2-Unterstützung für bidirektionales Vollduplex-Streaming entwickelt. Streaming ermöglicht das Hoch- oder Herunterladen einer großen Menge an Informationen, sodass Anfragen und Antworten beliebig groß sein können. Beim Streaming können Client und Server Nachrichten gleichzeitig lesen und schreiben und sich gegenseitig abonnieren, ohne Ressourcen-IDs zu verfolgen. Dadurch wird Ihre App-Implementierung flexibler.
Nahtlose Integration mit Protokollzwischenspeicher
gRPC verwendet Protocol Buffers (Protobuf) als Serialisierungs-/Deserialisierungsmethode mit dem für Android optimierten Codegen-Plug-in (Protobuf Java Lite). Im Vergleich zum textbasierten Format (z. B. JSON) bietet Protobuf einen effizienteren Datenaustausch in Bezug auf Marshalling-Geschwindigkeit und Codegröße, was den Einsatz in mobilen Umgebungen besser macht. Außerdem erleichtert die prägnante Syntax für Nachrichten-/Dienstdefinitionen von Protobuf das Definieren von Datenmodell- und Anwendungsprotokollen für Ihre Anwendung erheblich.

Nutzungsübersicht

Gemäß der Anleitung gRPC-Grundlagen – Android Java sind vier Schritte zur Verwendung von gRPC für Android-Apps erforderlich:

  • RPC-Dienste mit Protokollzwischenspeichern definieren und gRPC-Clientschnittstellen generieren.
  • Erstellen Sie einen Kanal, der als Medium für RPC-Aufrufe zwischen Client und Server dient.
  • Erstellen Sie einen Client-Stub als Einstiegspunkt zum Initiieren von RPC-Aufrufen von der Clientseite.
  • Führen Sie RPC-Aufrufe an den Remoteserver wie bei lokalen Prozeduraufrufen aus.

Im bereitgestellten Beispiel werden Byte zu Demonstrationszwecken im Nur-Text-Format übertragen. Ihre Anwendung sollte jedoch immer die Netzwerkdaten in der Produktion verschlüsseln. gRPC unterstützt die SSL/TLS-Verschlüsselung sowie den OAuth-Tokenaustausch (OAuth2 mit Google-Diensten) für die Authentifizierung. Weitere Informationen finden Sie unter TLS auf Android-Geräten und OAuth2 verwenden.

Transport

gRPC bietet zwei verschiedene Transportimplementierungen für Android-Clients: OkHttp und Cronet.

Transport auswählen (erweitert)

  • OkHttp
    OkHttp ist ein schlankes Netzwerk-Stack, das für den Einsatz auf Mobilgeräten entwickelt wurde. Es ist der gRPC-Standardtransport zum Ausführen in der Android-Umgebung. Wenn Sie OkHttp als gRPC-Transport für Ihre App verwenden möchten, erstellen Sie den Kanal mit AndroidChannelBuilder, der OkHttpChannelBuilder umschließt und einen Netzwerkmonitor beim Android-Betriebssystem registriert, um schnell auf Netzwerkänderungen zu reagieren. Ein Anwendungsbeispiel finden Sie im gRPC-Java AndroidChannelBuilder.
  • Cronet (experimentell)
    Cronet ist der Netzwerk-Stack von Chromium, der als Bibliothek für Mobilgeräte verpackt ist. Es bietet robuste Netzwerkunterstützung mit dem modernen QUIC-Protokoll, das in unzuverlässigen Netzwerkumgebungen besonders effektiv sein kann. Weitere Informationen zu Cronet finden Sie unter Netzwerkvorgänge mit Cronet ausführen. Wenn Sie Cronet als gRPC-Transport für Ihre App verwenden möchten, erstellen Sie den Kanal mit CronetChannelBuilder. Ein Anwendungsbeispiel finden Sie in gRPC-Java Cronet Transport.

Generell empfehlen wir Anwendungen, die auf aktuelle SDK-Versionen ausgerichtet sind, da dieses einen leistungsfähigeren Netzwerk-Stack bietet. Der Nachteil von Cronet ist die Erhöhung der APK-Größe, da durch das Hinzufügen der Binär-Cronet-Abhängigkeit mehr als 1 MB zur App-Größe hinzugefügt wird, im Gegensatz zu etwa 100 KB bei OkHttp. Ab GMSCore Version 10 kann eine aktuelle Kopie von Cronet über die Google Play-Dienste geladen werden. Die APK-Größe spielt möglicherweise keine Rolle mehr, obwohl Geräte, auf denen noch nicht die neueste GMSCore installiert ist, OkHttp verwenden kann.