gRPC 中 Client 与 Server 数据交互的 4 种模式 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000014803113
项目地址: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
希望本项目对你有所帮助 ☺️
本文链接:https://www.pangulab.com/post/f5a3696d.html, 参与评论 »
--EOF--
发表于 2019-01-19 14:43:00 ,并被添加「 grpc 」标签。
本站使用「署名 4.0 国际」创作共享协议,转载请注明作者及原网址。更多说明 »
提醒:本文最后更新于 1916 天前,文中所描述的信息可能已发生改变,请谨慎使用。
专题「web开发」的其它文章 »
- python gevent实践应用范例 (Apr 05, 2019)
- BSON与JSON的区别 (Feb 10, 2019)
- 解释pykafka参数最详细的记录 (Jan 30, 2019)
- python 操作Kafka (Jan 22, 2019)
- 从Protocol Buffers 到 gRPC (Jan 15, 2019)
- Mysql 事务探索及其在 Django 中的实践 (Jan 11, 2019)
- Python编程reload热更新代码 (Jan 10, 2019)
- 理解 JWT(JSON Web Token)认证及 python 实践 (Jan 08, 2019)
- 分布式队列神器 Celery - Python (Jan 08, 2019)
- 通过flask的request对象获取url (Jan 07, 2019)
- Flask Restful API 权限管理设计与实现 (Jan 03, 2019)
- 使用 Flask 设计带认证 token 的 RESTful API 接口 [翻译] 使用 python 的 Flask 实现一个 RESTful API 服务器端 (Jan 03, 2019)
评论列表