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

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

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状态然后发送回去。


相关文章
|
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得一些个人总结
81 0
|
5月前
|
XML Go 开发工具
RPC简介和grpc的使用
RPC简介和grpc的使用
56 0
|
7月前
|
JSON Cloud Native 网络协议
gRPC简介: Google的高性能RPC框架
gRPC简介: Google的高性能RPC框架
79 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框架