gRPC阅读日记(六)来看看客户端的rpc请求如何实现

简介: gRPC阅读日记(六)来看看客户端的rpc请求如何实现

gRPC阅读日记(六)

学习如何调用服务方法

今天来学习如何调用服务方法,我看的是Go的gRPC教程,RPCs都采用同步阻塞模式,换句话说就是每个请求都需要等待服务器给与响应或者返回错误。

Simple RPC

调用该RPC几乎就是直观的就像调用本地方法那样

feature, err := client.GetFeature(context.Background(), &pb.Point{409146138, -746188906})
if err != nil {
  ...
}

如上所示,方法参数中,我们传入了protocol buffer的消息对象Point。我们还传了context.Context对象,可以帮我们改变RPC's的行为如果有必要的话。比如超时处理和取消一个RPC请求。如果调用方法时没有返回错误。我们就可以读取到响应内容的信息了。

log.Println(feature)

Server-side streaming RPC

在下个例子中调用了ListFeatures, 该方法返回了地理特征的流式响应,在之前系列的gRPC阅读日记里写了如何创建RPC的服务端,跟下方的实现很相似,流式RPC的实现在两端都比较相似。

我之前读到这里的时候,回头翻看过去,以为是ListFeatures实现和调用很想,但是仔细想想,在调用响应流式RPC的时候,客户端是接收数据流的一方,那么服务端在处理请求流式RPC的时候,服务端也变成了接收数据流的一方。所以具体的实现,我觉得可以对照:

  • server端请求流式RPC的处理RouteChat
  • 和clietn端调用响应流式RPC的ListFeatures

rect := &pb.Rectangle{ ... }  // initialize a pb.Rectangle
stream, err := client.ListFeatures(context.Background(), rect)
if err != nil {
  ...
}
for {
    feature, err := stream.Recv()
    if err == io.EOF {
        break
    }
    if err != nil {
        log.Fatalf("%v.ListFeatures(_) = _, %v", client, err)
    }
    log.Println(feature)
}

我们获得了一个RoutGuide_ListFeaturesClient的实例而不是直接的响应对象,client可以使用RouteGuide_ListFeaturesClient流去读取来自服务端的响应信息。

获取流式响应的方式还是一样,调用RouteGuide_ListFeaturesClient的Recv()方法,如果没有错误且err不等于io.EOF的时候就持续读取。如果出现io.EOF证明阅读完毕,如果出现了其他错误,那么gRPC层就会处理,会返回rpc错误。


相关文章
|
4月前
|
缓存 网络协议 安全
计算机网络 TCP、RPC、GRPC、HTTP 对比
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 对比
|
7月前
|
编解码 中间件 Go
Go语言学习 - RPC篇:gRPC拦截器剖析
我们在前几讲提到过,优秀的RPC框架都提供了`middleware`的能力,可以减少很多重复代码的编写。在gRPC-Gateway的方案里,包括了两块中间件的能力: 1. gRPC中的`ServerOption`,是所有gRPC+HTTP都会被处理 2. gRPC-Gateway中的`ServeMuxOption`,只有HTTP协议会被处理 今天,我们先关注共同部分的`ServerOption`,它提供的能力最为全面,让我们一起了解下。
45 0
|
3月前
|
Dubbo Java 应用服务中间件
grpc&rpc
grpc&rpc
|
4月前
|
网络协议 安全 API
计算机网络 TCP、RPC、GRPC、HTTP 总结
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 总结
|
5月前
|
缓存 网络协议 安全
tcp、http、rpc和grpc得一些个人总结
tcp、http、rpc和grpc得一些个人总结
82 0
|
5月前
|
XML Go 开发工具
RPC简介和grpc的使用
RPC简介和grpc的使用
56 0
|
7月前
|
JSON Cloud Native 网络协议
gRPC简介: Google的高性能RPC框架
gRPC简介: Google的高性能RPC框架
80 0
|
3月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
81 9
|
8月前
|
消息中间件 负载均衡 Dubbo
如何自己设计一个类似Dubbo的RPC框架?
如何自己设计一个类似Dubbo的RPC框架?
63 0
|
5月前
|
Dubbo Java 应用服务中间件
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架