gRPC 中 Client 與 Server 數據交互的 4 種模式

項目地址:grpc-modesgit

最近使用 gRPC 入門微服務開發,特此總結了 gRPC 中 4 種運行模式github

目錄結構

$GOPATH
└── grpc
    ├── simple                  // 簡單模式 RPC
    │   ├── client    
    │   │   └── client.go        # 客戶端代碼
    │   ├── proto            
    │   │   ├── user.pb.go    
    │   │   └── user.proto       # 通訊的 protobuf 協議
    │   └── server
    │       └── server.go        # 服務端代碼
    ├── server-side-streaming    // 服務端流式 RPC 
    ├── client-side-streaming    // 客戶端流式 RPC 
    └── bidirectional-streaming  // 客戶端與服務端雙向流式 RPC

UserService 微服務

本項目中定義了一個微服務:UserService,它只有一個 RPC:GetUserInfo()數據庫

syntax = "proto3";
package grpc.simple;

// 定義 UserService 微服務
service UserService {
    // 微服務中獲取用戶信息的 RPC 函數
    rpc GetUserInfo (UserRequest) returns (UserResponse);
}

// 客戶端請求的格式
message UserRequest {
    int32 ID = 1;
}

// 服務端響應的格式
message UserResponse {
    string name = 1;
    int32 age = 2;
}

GetUserInfo() 函數中模擬了一個數據庫,存儲用戶的姓名和年齡:ide

// ID 爲 key,用戶信息爲 value 模擬數據庫查詢結果
var users = map[int32]pb.UserResponse{
    1: {Name: "Dennis MacAlistair Ritchie", Age: 70},
    2: {Name: "Ken Thompson", Age: 75},
    3: {Name: "Rob Pike", Age: 62},
}

客戶端請求帶上 ID,查詢後將用戶信息做爲響應返回。函數

客戶端與服務端進行數據交互的四種模式

simpe 簡單模式 RPC

客戶端發起一個請求到服務端,服務端返回一個響應。微服務

client 請求 ID 爲 2 的用戶數據,server 返回 ID 爲 2 的用戶數據:學習

simple

server-side streaming 服務端流式 RPC

客戶端發起一個請求到服務端,服務端返回一段連續的數據流響應。spa

client 請求 1 的用戶數據,server 返回 一、二、3 的用戶數據流:code

server-side-streaming

client-side streaming 客戶端流式 RPC

客戶端將一段連續的數據流發送到服務端,服務端返回一個響應。server

client 請求 一、二、3 的用戶數據流,server 返回 3 的用戶數據:

client-side-streaming

Bidirectional streaming 雙向數據流模式的 gRPC

客戶端將連續的數據流發送到服務端,服務端返回交互的數據流。

client 依次請求 一、二、3 的用戶數據流,服務端依次返回 一、二、3 的用戶數據流:

bidirectional-streaming

最後

最近在系統的學習 Golang 的微服務,從 gRPC 開始,到 go-micro、Docker 化微服務等,每週更新。歡迎關注個人博客 wuYinBlog

但願本項目對你有所幫助 ☺️

相關文章
相關標籤/搜索