最簡單的 gRPC 教程—2 通信模式

gRPC 包含四種基礎(chǔ)的通信模式:
一元模式(Unary RPC)
服務(wù)器端流 RPC(Server Sreaming RPC)
客戶端流 RPC(Client Streaming RPC)
雙向流 RPC(Bidirectional Streaming RPC)
一元模式
一元模式是最簡單、也最容易理解的通信方式,客戶端發(fā)送單一的請求,并從服務(wù)端獲取到響應(yīng)。上一篇文章中的獲取和添加商品的邏輯,其實就是很典型的一元 RPC 模式。
在這里,我們構(gòu)建一個簡單的訂單服務(wù),可以添加、獲取、搜索、處理訂單,借此來演示 gRPC 的幾種通信模式。

首先定義一個 proto 文件(我命名為 OrderInfo.proto):
然后使用命令 protoc --go_out=plugins=grpc:../order OrderInfo.proto
生成所需要的客戶端存根文件(參考前一篇文章)。
然后新建一個 server/main.go 文件,寫一下兩個業(yè)務(wù)方法的邏輯:
然后繼續(xù)在 main.go 中添加一個服務(wù)器:
接下來繼續(xù)寫客戶端的邏輯,調(diào)用服務(wù)端的兩個方法,獲取到響應(yīng)。和上一篇文章類似,新建一個 client/main.go 文件:
服務(wù)端流 RPC 模式
一元模式只有單一的請求和響應(yīng),但是服務(wù)器端流 RPC 模式下,服務(wù)器在收到客戶端的請求后,可能會發(fā)送多個響應(yīng)的序列,這被稱為“流”。
在訂單服務(wù)中,如果客戶端根據(jù)關(guān)鍵字搜索訂單,那么服務(wù)器會把所有滿足條件的記錄返回給客戶端,通過這個例子來演示一下這種模式:

首先在 proto 文件中新增一個 rpc 方法:
注意這里的返回值加上 stream
表示返回的是訂單流,然后再使用 protoc
命令重新生成 OrderInfo.pb.go 文件。
然后在 server/main.go 文件中添加搜索訂單的邏輯:
客戶端的寫法也和之前的有一些區(qū)別了:
客戶端流 RPC 模式
在這種模式下,客戶端會發(fā)送多個請求給服務(wù)端,服務(wù)端會發(fā)送一條響應(yīng)到客戶端。在訂單服務(wù)中,我們會更新一批訂單,客戶端則通過流的的方式傳輸過來。
還是在 proto 文件中定義一個新的方法:
注意這里在 rpc 的方法入?yún)⒅卸嗔?stream
關(guān)鍵字,表示是客戶端流,然后再使用 protoc
生成文件。
還是老樣子,在 server/main.go 中添加更新訂單的邏輯:
然后繼續(xù)在客戶端 client/main.go 中添加:
雙向流 RPC 模式
在訂單服務(wù)中,我們可能需要處理訂單,客戶端發(fā)送連續(xù)的訂單信息,服務(wù)端對訂單進(jìn)行發(fā)貨處理。首先我們在 proto 文件中定義一個新的方法:
然后在 server/main.go 中實現(xiàn)該方法的邏輯:
這里的處理邏輯比起前面的幾個稍微復(fù)雜了一點,需要多看下,自己動手敲一下。
然后就是客戶端的邏輯:
這就是 gRPC 的四種通信模式的 demo 演示,覺得對你有幫助的話,記得點個贊??哦!