gRPC客戶端和服務器可以在各種環境中運行和交互-從google內部的服務器到您自己的筆記本電腦,並且可以用gRPC支持的任何語言編寫。因此,您可以使用Java輕松創建gRPC服務器,使用Go、Python和Ruby創建客戶端。此外,谷歌最新的API將具有gRPC版本的接口,以便您可以輕松地將谷歌的功能集成到您的應用程序中。
默認情況下,gRPC使用協議緩沖區,這是Google開放的壹種成熟的結構化數據序列化機制(當然也可以使用JSON等其他數據格式)。Proto3是壹種新型的協議緩沖區,它具有輕量級和簡化的語法,壹些有用的新功能並支持更多的新語言。目前已經發布了Java和C++的beta版本,Java nano(Android Java)的alpha版本,protocol buffers Github的源代碼庫中支持Ruby,golang/protobuf Github的源代碼庫中有Go語言的生成器。對更多語言的支持正在開發中。
使用gRPC,我們可以壹次在壹個。proto文件中定義服務,並以任何支持它的語言實現客戶端和服務器。相反,它們可以在各種環境中使用,從谷歌的服務器到妳自己的平板電腦——GRPC可以幫助妳解決不同語言和環境之間的復雜通信問題。使用協議緩沖區還可以獲得其他好處,包括高效的序列號、簡單的IDL和輕松的接口更新。
現在讓我們仔細看看當gRPC客戶端調用gRPC服務器的方法時發生了什麽。我們不討論實現細節。您可以在我們的特定語言頁面中找到有關實施細節的更多詳細內容。
首先,讓我們來看看最簡單的RPC形式:客戶端發送單個請求並獲得單個響應。
服務器端流式RPC與我們的簡單示例相同,只是它在獲取客戶端請求信息後發送回回復流。在發送所有回復後,服務器的狀態細節(狀態代碼和可選的狀態信息)和可選的跟蹤元數據被發送回客戶端,以完成服務器的工作。客戶端在收到所有服務器的響應後也完成了工作。
客戶端流RPC基本上與我們的簡單示例相同,只是客戶端向服務器發送請求流而不是原始的單個請求。服務器通常(但不壹定)在收到來自客戶端的所有請求後發送回壹個包含其狀態詳細信息和可選跟蹤數據的回復。
雙向流RPC,調用由調用方法的客戶端初始化,服務器接收客戶端的元數據、方法名稱和截止時間。服務器可以選擇發回其初始元數據或等待客戶端發送請求。下壹步如何開發取決於應用程序,因為客戶端和服務器可以以任何順序讀取和寫入-這些流的操作是完全獨立的。例如,服務器可以等到收到來自所有客戶端的消息後再編寫回復,或者服務器和客戶端可以像“乒乓”壹樣:服務器收到請求後,它發回壹個回復,然後客戶端根據回復發送另壹個請求,以此類推。
通過運行以下命令克隆並安裝grpc-go代碼庫:
下載protobuf源碼包
安裝golang-protobuf
第壹步是使用協議緩沖區來定義gRPC服務和方法請求和響應的類型。
若要定義服務,必須在。原型文件:
然後在服務中定義rpc方法,並指定請求和響應類型。gRPC允許定義四種類型的服務方法。
服務。原型文件如下: