gRPC è un framework RPC moderno, open source e ad alte prestazioni utilizzabile in qualsiasi ambiente. È in grado di connettere in modo efficiente i servizi all'interno e tra i data center con il supporto collegabile per bilanciamento del carico, tracciamento, controllo di integrità e autenticazione. È applicabile anche nell'ultimo miglio dei sistemi di computing distribuito per connettere dispositivi, applicazioni mobile e browser ai servizi di backend. Puoi trovare la documentazione sul sito web ufficiale di gRPC e ricevere assistenza dalle community open source. Questa guida ti indirizza alle soluzioni per creare app Android utilizzando gRPC.
grpc.io è il sito web ufficiale del progetto gRPC. Per saperne di più su come funziona gRPC, consulta Che cos'è gRPC? e gRPC Concepts. Per scoprire come utilizzare gRPC in un'app per Android, vedi l'esempio Hello World nella guida rapida di Java per Android gRPC. Puoi anche trovare molti altri esempi di gRPC per Android su GitHub.
Funzionalità
- La chiamata della procedura semplifica le operazioni
- Poiché si tratta di RPC, il modello di programmazione è costituito da chiamate di procedure: l'aspetto di networking della tecnologia è astratto dal codice dell'applicazione, facendolo quasi come se fosse una normale chiamata di funzione in-process. L'interazione client-server non sarà vincolata dalla semantica dei metodi delle risorse HTTP (ad esempio GET, PUT, POST e DELETE). Rispetto alle API REST, la tua implementazione appare più naturale, senza la necessità di gestire i metadati del protocollo HTTP.
- Trasmissione di rete efficiente con HTTP/2
- La trasmissione di dati dai dispositivi mobili a un server di backend può essere un processo che richiede molte risorse. Utilizzando il protocollo HTTP/1.1 standard, connessioni frequenti da un dispositivo mobile a un servizio cloud possono consumare la batteria, aumentare la latenza e bloccare la connessione di altre app. Per impostazione predefinita, gRPC viene eseguito su HTTP/2, il che introduce streaming bidirezionale, controllo dei flussi, compressione delle intestazioni e possibilità di multiplexare le richieste su una singola connessione TCP/IP. Il risultato è che gRPC può ridurre l'utilizzo delle risorse, con conseguente riduzione dei tempi di risposta tra l'app e i servizi in esecuzione nel cloud, un minore utilizzo della rete e una maggiore durata della batteria per i client in esecuzione su dispositivi mobili.
- Supporto integrato per lo scambio di dati in streaming
- gRPC è stato progettato sin dall'inizio con il supporto di HTTP/2 per lo streaming bidirezionale full-duplex. I flussi di dati consentono a una richiesta e a una risposta di avere dimensioni arbitrarie di grandi dimensioni, come operazioni che richiedono il caricamento o il download di una grande quantità di informazioni. Con il flusso di dati, client e server possono leggere e scrivere messaggi contemporaneamente e iscriversi l'uno all'altro senza monitorare gli ID risorsa. Ciò rende l'implementazione dell'app più flessibile.
- Integrazione perfetta con Protocol Buffer
- gRPC utilizza Protocol Buffer (Protobuf) come metodo di serializzazione/deserializzazione con il plug-in codegen ottimizzato per Android (Protobuf Java Lite). Rispetto al formato basato su testo (come JSON), Protobuf offre uno scambio di dati più efficiente in termini di velocità di marshalling e dimensioni del codice, il che lo rende più adatto all'utilizzo in ambienti mobili. Inoltre, la sintassi concisa della definizione di messaggi/servizi di Protobuf semplifica notevolmente la definizione del modello di dati e dei protocolli di applicazione per la tua app.
Panoramica dell'utilizzo
Seguendo il tutorial gRPC Basics - Android Java, l'utilizzo di gRPC per le app Android prevede quattro passaggi:
- Definire i servizi RPC con buffer di protocollo e generare le interfacce client gRPC.
- Crea un canale che agisca da mezzo per le chiamate RPC tra client e server.
- Crea uno Stub client come punto di ingresso per avviare chiamate RPC dal lato client.
- Effettua chiamate RPC al server remoto come faresti durante le chiamate di procedura locale.
A scopo dimostrativo, nell'esempio fornito i byte vengono trasmessi in testo normale. Tuttavia, la tua app deve sempre criptare i dati di rete in produzione. gRPC fornisce il supporto della crittografia SSL/TLS e lo scambio di token OAuth (OAuth2 con i servizi Google) per l'autenticazione. Per maggiori dettagli, vedi TLS su Android e Utilizzo di OAuth2.
Trasporti
gRPC offre due scelte per le implementazioni di trasporto per i client Android: OkHttp e Cronet.
Scegli un mezzo di trasporto (avanzato)
- OkHttp
- OkHttp è uno stack di networking leggero progettato per l'utilizzo sui dispositivi mobili. È il trasporto predefinito di gRPC per l'esecuzione in ambiente Android. Per utilizzare OkHttp come trasporto gRPC per la tua app, crea il canale con
AndroidChannelBuilder
, che esegue il wrapping diOkHttpChannelBuilder
e registra un monitoraggio di rete con il sistema operativo Android per rispondere rapidamente alle modifiche di rete. Puoi trovare un esempio di utilizzo in gRPC-Java AndroidChannelBuilder.
- Cronet (sperimentale)
- Cronet è lo stack di networking di Chromium pacchettizzato come libreria per dispositivi mobili. Offre un solido supporto di rete con protocollo QUIC all'avanguardia, particolarmente efficace in ambienti di rete non affidabili. Per ulteriori dettagli su Cronet, vedi Eseguire operazioni di rete utilizzando Cronet.
Per utilizzare Cronet come trasporto gRPC per la tua app, crea il canale con
CronetChannelBuilder
. In gRPC-Java Cronet Transport è fornito un utilizzo di esempio.
In generale, consigliamo di utilizzare Cronet per le app destinate alle versioni più recenti dell'SDK, che offre uno stack di rete più potente. Lo svantaggio dell'uso di Cronet è l'aumento delle dimensioni dell'APK, poiché l'aggiunta della dipendenza binaria Cronet aggiungerà più di 1 MB alle dimensioni dell'app, rispetto a circa 100 kB per OkHttp. A partire da GMSCore v.10, da Google Play Services può essere caricata una copia aggiornata di Cronet. Le dimensioni dell'APK potrebbero non essere più un problema, anche se i dispositivi su cui non è installato l'ultimo GMSCore potrebbero comunque preferire l'utilizzo di OkHttp.