无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

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

2021-04-14 00:32 作者:roseduanV  | 我要投稿

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 模式

雙向流 RPC 模式其實就是客戶端和服務(wù)端流 RPC 的組合,客戶端以消息流的方式發(fā)送數(shù)據(jù),服務(wù)端也已消息流的方式響應(yīng)數(shù)據(jù)。

在訂單服務(wù)中,我們可能需要處理訂單,客戶端發(fā)送連續(xù)的訂單信息,服務(wù)端對訂單進(jìn)行發(fā)貨處理。首先我們在 proto 文件中定義一個新的方法:

然后在 server/main.go 中實現(xiàn)該方法的邏輯:

這里的處理邏輯比起前面的幾個稍微復(fù)雜了一點,需要多看下,自己動手敲一下。

然后就是客戶端的邏輯:

這就是 gRPC 的四種通信模式的 demo 演示,覺得對你有幫助的話,記得點個贊??哦!

demo 的完整代碼在我的 GitHub 上面:github.com/roseduan/grp


最簡單的 gRPC 教程—2 通信模式的評論 (共 條)

分享到微博請遵守國家法律
吉安县| 保靖县| 东至县| 东乡族自治县| 宝清县| 蓬安县| 拉萨市| 榕江县| 涟源市| 泾川县| 博爱县| 山丹县| 长垣县| 乌兰浩特市| 太仆寺旗| 渭南市| 陆丰市| 德惠市| 呈贡县| 乌拉特前旗| 马公市| 惠来县| 鄂托克旗| 巧家县| 麦盖提县| 宁化县| 独山县| 调兵山市| 九寨沟县| 壶关县| 遂平县| 新邵县| 达尔| 丰县| 那坡县| 青河县| 鄂托克旗| 沁阳市| 罗江县| 苏州市| 怀集县|