使用 gRPC 打造用戶端伺服器應用程式

gRPC 是新型的開放原始碼高效能 RPC 架構,可在任何環境中執行。這項服務能有效率地連結資料中心內外的服務,並支援負載平衡、追蹤、健康狀態檢查和驗證。您也可以在分散式運算的最後一里,將裝置、行動應用程式和瀏覽器連線至後端服務。您可以在 gRPC 的官方網站上找到說明文件,並取得開放原始碼社群的支援。本指南會引導您使用 gRPC 建構 Android 應用程式。

grpc.io 是 gRPC 專案的官方網站。如要進一步瞭解 gRPC 的運作方式,請參閱什麼是 gRPC?gRPC 概念。 如要瞭解如何在 Android 應用程式中使用 gRPC,請參閱 gRPC Android Java 快速入門導覽課程中的 Hello World 範例。您也可以在 GitHub 上找到其他幾個其他 gRPC Android 範例。

功能

執行程序呼叫既簡單
由於程式設計模型是 RPC,因此程式設計模型便是程序呼叫:這項技術的網路層面會從應用程式程式碼中抽離,看起來就像是一般的程序內函式呼叫一樣。您的用戶端與伺服器互動不受 HTTP 資源方法 (例如 GET、PUT、POST 和 DELETE) 的語意限制。與 REST API 相比,您的實作成果會更自然,不必處理 HTTP 通訊協定中繼資料。
使用 HTTP/2 提高網路傳輸效率
將資料從行動裝置傳送至後端伺服器可能會耗費大量資源。使用標準 HTTP/1.1 通訊協定時,如果行動裝置和雲端服務經常連線,就可能消耗電力、增加延遲時間,以及禁止其他應用程式連線。根據預設,gRPC 會在 HTTP/2 之上執行,提供雙向串流、流量控制、標頭壓縮,以及透過單一 TCP/IP 連線多工要求的功能。因此,gRPC 可以減少資源用量,進而降低在雲端中執行的應用程式與服務之間的回應時間、減少網路用量,以及延長在行動裝置上執行的用戶端電池續航力。
內建串流資料交換支援
gRPC 專為 HTTP/2 的全雙工雙向串流支援功能設計而成。串流允許要求和回應的大小任意過大,例如需要上傳或下載大量資訊的作業。透過串流,用戶端和伺服器可以同時讀取和寫入訊息,並彼此訂閱,而無需追蹤資源 ID。這可以讓您的應用程式實作更有彈性。
與通訊協定緩衝區完美整合
gRPC 使用通訊協定緩衝區 (Protobuf) 做為序列化/去序列化方法,並搭配最佳化-for-Android 程式碼範例 (Protobuf Java Lite)。與文字格式 (例如 JSON) 相比,Protobuf 可針對管理速度和程式碼大小提供更有效的資料交換,因此更適合在行動裝置環境中使用。此外,Protobuf 簡潔的訊息/服務定義語法可讓您更輕鬆地定義應用程式的資料模型和應用程式通訊協定。

用量總覽

按照「gRPC 基本概念 - Android Java」教學課程,對 Android 應用程式使用 gRPC 時,必須執行四個步驟:

  • 使用通訊協定緩衝區定義遠端程序呼叫 (RPC) 服務,並產生 gRPC 用戶端介面。
  • 建構管道,做為用戶端和伺服器之間的遠端程序呼叫 (RPC) 呼叫媒介。
  • 建立用戶端虛設常式,做為從用戶端啟動 RPC 呼叫的進入點。
  • 向遠端伺服器發出遠端程序呼叫 (RPC) 呼叫,就像執行本機程序呼叫一樣。

為了便於示範,位元組在提供的範例中是以純文字的形式傳輸。不過,您的應用程式應一律在實際工作環境中加密網路資料。gRPC 提供 SSL/TLS 加密支援,以及 OAuth 權杖交換 (使用 OAuth2 搭配 Google 服務) 進行驗證。詳情請參閱 Android 上的傳輸層安全標準 (TLS)使用 OAuth2

交通運輸

gRPC 為 Android 用戶端提供兩種傳輸實作選項:OkHttp 和 Cronet。

選擇交通工具 (進階)

  • OkHttp
    OkHttp 是專為行動裝置設計的輕量級網路堆疊,此為 gRPC 的預設傳輸方式,以便在 Android 環境中執行。如要將 OkHttp 做為應用程式的 gRPC 傳輸,請使用 AndroidChannelBuilder 建構管道,以便納入 OkHttpChannelBuilder,並透過 Android 作業系統註冊網路監控器,以便快速回應網路變更。如需使用範例,請參閱 gRPC-Java AndroidChannelBuilder
  • Cronet (實驗功能)
    Cronet 是 Chromium 的網路堆疊,封裝為行動裝置適用的程式庫。它透過最先進的 QUIC 通訊協定提供完善的網路支援,在不穩定的網路環境中特別能發揮效果。如要進一步瞭解 Cronet,請參閱「使用 Cronet 執行網路作業」。如要使用 Cronet 做為應用程式的 gRPC 傳輸,請使用 CronetChannelBuilder 建構管道。gRPC-Java Cronet Transport 中提供使用範例。

一般來說,我們建議指定近期 SDK 版本的應用程式使用 Cronet,因為這提供更強大的網路堆疊。使用 Cronet 的缺點是 APK 大小會增加,因為新增二進位檔 Cronet 依附元件後,應用程式大小會增加 >1 MB,而 OkHttp 也會增加約 100 KB。從 GMSCore v.10 起,您可以從 Google Play 服務載入 Cronet 的最新副本。雖然未安裝最新 GMSCore 的裝置可能偏好使用 OkHttp,但 APK 大小可能不再有問題。