gRPC 中 Client 与 Server 数据交互的 4 种模式
项目地址:grpc-modes
最近使用 gRPC 入门微服务开发,特此总结了 gRPC 中 4 种运行模式
目录结构
$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()
函数中模拟了一个数据库,存储用户的姓名和年龄:
// 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 的用户数据:
server-side streaming 服务端流式 RPC
客户端发起一个请求到服务端,服务端返回一段连续的数据流响应。
client 请求 1 的用户数据,server 返回 1、2、3 的用户数据流:
client-side streaming 客户端流式 RPC
客户端将一段连续的数据流发送到服务端,服务端返回一个响应。
client 请求 1、2、3 的用户数据流,server 返回 3 的用户数据:
Bidirectional streaming 双向数据流模式的 gRPC
客户端将连续的数据流发送到服务端,服务端返回交互的数据流。
client 依次请求 1、2、3 的用户数据流,服务端依次返回 1、2、3 的用户数据流:
最后
最近在系统的学习 Golang 的微服务,从 gRPC 开始,到 go-micro、Docker 化微服务等,每周更新。欢迎关注我的博客 wuYinBlog
希望本项目对你有所帮助 ☺️
相关推荐
dabaoge 2019-12-12
darren0zdc 2020-10-16
ltstud 2020-07-24
Erick 2020-07-18
wujingsheng0 2020-06-16
xmwang0 2020-06-14
极品小肥羊 2020-05-31
小小书童 2020-05-20
极品小肥羊 2020-04-23
小小书童 2020-04-10
君小黑 2020-03-04
naiwenw 2020-02-18
小小书童 2020-02-22
dabaoge 2020-02-16
小小书童 2019-12-23
dabaoge 2020-01-25
MAC2007 2020-01-17