美文网首页
gRPC阅读日记(三)rpc请求官方用例的实现

gRPC阅读日记(三)rpc请求官方用例的实现

作者: 糖醋沼跃鱼 | 来源:发表于2022-03-04 16:57 被阅读0次

gRPC阅读日记(三)

普通RPC

先来看看简单gRPC的实现,GetFeature处理单点消息的请求,并返回相应点的特征信息。

func (s *routeGuideServer) GetFeature(ctx context.Context, point *pb.Point) (*pb.Feature, error) {
  for _, feature := range s.savedFeatures {
    if proto.Equal(feature.Location, point) {
      return feature, nil
    }
  }
  // No feature was found, return an unnamed feature
  return &pb.Feature{Location: point}, nil
}

该方法需要两个参数,一个是给rpc的上下文处理器,另一个就是来自客户端的point消息,也就是现在我们在.proto文件中预定义好的请求类型。返回也是先前定义的feature消息,相应类型,以及error。
从实现中可以看到,该RPC是将取到的点,与自己的数据库中的信息做比对,如果有则返回该点的内容且error为nil,如果没有则返回该点,error为nil。

服务端的流式RPC

服务侧的流式RPC会相应多条数据给客户端。

func (s *routeGuideServer) ListFeatures(rect *pb.Rectangle, stream pb.RouteGuide_ListFeaturesServer) error {
  for _, feature := range s.savedFeatures {
    if inRange(feature.Location, rect) {
      if err := stream.Send(feature); err != nil {
        return err
      }
    }
  }
  return nil
}

从实现上看,这次收到的是带有经纬范围的请求,所以服务端通过流式相应返回多条数据
如果查找到范围内的数据则返回,发送失败则返回错误,如果没有查找到返回nil

更加特殊的是,相比较于简单的请求类型,和相应类型,这次使用了更加复杂的请求对象,以及另一个特殊的对象RouteGuide_ListFeaturesServer去写响应,因为我们需要使用他的方法stream.send()

还有一点不同在于,在上一个普通的rpc中,我们返回nil error去告诉客户端,响应已经写完结束了,但在这次如果send中发生了任何错误,我们就会返回非nil的error回去,gRPC层将会将它该错误翻译成恰当的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介绍

    [TOC] gRPC gRPC介绍 gRPC是什么? RPC和RESTful的区别是什么? RPC的消息传输可以是...

  • 深入浅出gRPC

    一、gRPC介绍 gRPC 是在 HTTP/2 之上实现的 RPC 框架,HTTP/2 是第 7 层(应用层)协议...

  • PHP作为客户端请求GRPC服务

    最近要使用别的部门提供的短信服务,用go写的RPC,可能要用到GRPC框架去请求,先了解下,后面对接了再补一篇实战...

  • gRPC SkyLB.md

    gRPC SkyLB gRPC 作为一款高性能、通用的 RPC 框架,相比传统的RPC框架有着自己天然的优势: p...

  • google grpc 其他三种调用方式

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

  • gRPC入门指南详解

    1、gRPC 官方与简要 GitHubgRPC是一个现代的,开源的,高性能的远程过程调用(RPC)框架,可以在任何...

  • grpc简介

    gRPC[https://grpc.io/] 是一种与语言无关的高性能远程过程调用 (RPC) 框架。 gRPC ...

网友评论

      本文标题:gRPC阅读日记(三)rpc请求官方用例的实现

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