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

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

作者: 糖醋沼跃鱼 | 来源:发表于2022-03-07 11:13 被阅读0次

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错误。

相关文章

  • grpc初探

    1 grpc的定义 grpc good rpc grpc使用protobuf文件声明服务,服务端和客户端都通使用...

  • google grpc 其他三种调用方式

    google grpc中定义了四种调用方式,分别是 一元RPC:rpc客户端发送一个请求,服务端返回一个响应。 服...

  • golang grpc keepalive

    最近遇到 grpc 客户端报错 rpc error: code = Unavailable desc = tran...

  • gRPC使用

    gRPC gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架。 gRPC使客户端和...

  • 基于Netty的高性能JAVA的RPC框架

    RPC的实现 1. RPC客户端 2. RPC服务端 RPC客户端的实现 RPC客户端和RPC服务器端需要一个相同...

  • 9.RabbitMQ实现RPC

    RPC,即远程过程调用,其流程如下: RPC实现RPC,则需要客户端(生产者)发送请求消息,服务端(消费者)回复响...

  • gRPC 简介并实战——文末附源码

    1. 介绍 gRPC 是一个高性能的开源 RPC 框架,最初由 Google 开发。 RPC 是什么?在客户端应用...

  • gRPC基于Golang和Java的简单实现

    原文连接: 一文了解RPC以及gRPC基于Golang和Java的简单实现 一:什么是RPC 简介:RPC:Re...

  • 《RPC实战与核心原理》学习笔记Day5

    06 | RPC实战:剖析gRPC源码,动手实现一个完整的RPC 我们通过动态代理技术,屏蔽RPC调用的细节,从而...

  • golang grpc

    golang grpc rpc种类 grpc含义 gRPC是Google的RPC框架,开源、高性能、跨语言,基于H...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/oxkarrtx.html