接待会见我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;本篇概览本文《gRPC学习》系列的第四篇,前文咱们体验了最简朴的gRPC开发,编写客户端挪用服务端,但这只是最简朴的一种,在解决实际问题时是远远不够的;实际上,gRPC允许你界说以下四类服务方法(以下形貌来自http://doc.oschina.net/grpc):单项 RPC,即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数挪用(前一篇文章就是此类);服务端流式 RPC,即客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止;客户端流式 RPC,即客户端用提供的一个数据流写入并发送一系列消息给服务端。
一旦客户端完成消息写入,就等候服务端读取这些消息并返回应答;双向流式 RPC,即双方都可以划分通过一个读写数据流来发送一系列消息。这两个数据流操作是相互独立的,所以客户端和服务端能按其希望的任意顺序读写,例如:服务端可以在写应答前等候所有的客户端消息,或者它可以先读一个消息再写一个消息,或者是读写相联合的其他方式。每个数据流里消息的顺序会被保持。
本篇的内容,就是编码实现上述四类服务方法,并编写客户端代码挪用,整个开发流程如下图所示:源码下载如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示:这个git项目中有多个文件夹,本章的应用在go-source文件夹下,如下图红框所示:go-source内里有多个子文件夹,本篇的源码在grpcstream中,如下图红框:提前说明文件和目录本次实战在$GOPATH/src目录下新增文件夹grpcstream,内里总共有以下内容:[golang@centos7 src]$ tree grpcstream/grpcstream/├── client│ └── client.go├── grpcstream.pb.go├── grpcstream.proto└── server └── server.go准备事情完成,接下来正式开始开发;编写proto文件proto文件用来形貌远程服务相关的信息,如方法签名、数据结构等,本篇的proto文件名为grpcstream.proto,位置是$GOPATH/src/grpcstream,内容如下(稍后会指出几处要注意的地方):// 协议类型syntax = "proto3";// 包名package grpcstream;// 服务端请求的数据结构message SingleRequest { int32 id = 1;}// 服务端响应的数据结构message SingleResponse { int32 id = 1; string name = 2;}// 界说的服务名service IGrpcStremService { // 单项RPC :单个请求,单个响应 rpc SingleReqSingleResp (SingleRequest) returns (SingleResponse); // 服务端流式 :单个请求,荟萃响应 rpc SingleReqMultiResp (SingleRequest) returns (stream SingleResponse); // 客户端流式 :荟萃请求,单个响应 rpc MultiReqSingleResp (stream SingleRequest) returns (SingleResponse); // 双向流式 :荟萃请求,荟萃响应 rpc MultiReqMultiResp (stream SingleRequest) returns (stream SingleResponse);}这个grpcstream.proto文件有以下几处要注意的地方:方法SingleReqSingleResp很是简朴,和上一篇文章中的demo一样,入参是一个数据结构,服务端返回的也是一个数据结构;方法SingleReqSingleResp是服务端流式类型,特征是返回值用stream修饰;方法MultiReqSingleResp是客户端流式类型,特征是入参用stream修饰;方法MultiReqMultiResp是双向类型,特征是入参和返回值都用stream修饰;似乎有纪律可循:客户端如果想和服务端建设通道传输连续的数据,就在通道位置用stream修饰,一共有两个位置,第一个是进入服务端的入参,第二个是从服务端出来的返回值;凭据proto生成go源码在grpcstream.proto所在的目录,执行以下下令:protoc --go_out=plugins=grpc:. grpcstream.proto如果grpcstream.proto没有语法错误,会在当前目录生成文件grpcstream.pb.go,这内里是工具protoc-gen-go自动生成的代码,内里生成的代码在开发服务端和客户端时都市用到;对服务端来说,grpcstream.pb.go中最重要的是IGrpcStremServiceServer接口 ,服务端需要实现该接口所有的方法作为业务逻辑,接口界说如下:type IGrpc。
本文来源:博亚体育app最新官方入口-www.xxjgcyunlong.com