分享
  1. 首页
  2. 文章

gRPC 中 Client 与 Server 数据交互的 4 种模式

wuYin · · 2414 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

项目地址: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 的用户数据:

simple

server-side streaming 服务端流式 RPC

客户端发起一个请求到服务端,服务端返回一段连续的数据流响应。

client 请求 1 的用户数据,server 返回 1、2、3 的用户数据流:

server-side-streaming

client-side streaming 客户端流式 RPC

客户端将一段连续的数据流发送到服务端,服务端返回一个响应。

client 请求 1、2、3 的用户数据流,server 返回 3 的用户数据:

client-side-streaming

Bidirectional streaming 双向数据流模式的 gRPC

客户端将连续的数据流发送到服务端,服务端返回交互的数据流。

client 依次请求 1、2、3 的用户数据流,服务端依次返回 1、2、3 的用户数据流:

bidirectional-streaming

最后

最近在系统的学习 Golang 的微服务,从 gRPC 开始,到 go-micro、Docker 化微服务等,每周更新。欢迎关注我的博客 wuYinBlog

希望本项目对你有所帮助 ☺️


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:wuYin

查看原文:gRPC 中 Client 与 Server 数据交互的 4 种模式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2414 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏