GRPC

本文通过一个简单的GRPC demo介绍了谷歌的RPC框架。内容包括服务端和客户端的构建,以及如何通过.proto文件生成服务和方法的封装。GRPC基于RPC,服务端提供预定义类型的接口,客户端通过动态代理调用,实现跨语言服务调用。总结来说,GRPC是对RPC的封装,使用协议文件自动生成服务和调用逻辑。
摘要由CSDN通过智能技术生成

GRPC

grpc是谷歌的rpc框架,通过一个小小的demo,理解一下其工作原理。构建一个java语言调度python语言组成的服务的这样一个demo,对grpc进行充分理解。

首先对于rpc其实之前有过学习,如下图所示:
在这里插入图片描述

服务端中的每个服务包含许多的方法,通过一个对外的IP以及端口对外提供服务,客户端即服务调用者在本地开放多个动态代理,在本地需要调度远程服务的时候,仅仅需要调度动态代理提供的服务,看起来貌似就是本地调用一样。。。

总得来说就是,服务端整合出一个服务模块对外提供服务,然后客户端通过动态代理的方式实现服务调用。一个服务一个动态代理,然后每个服务中可能存在不同的方法,因此服务中的方法通过不同的方法名进行区分。

接下来,分析一下,grpc的实现。

具体的实现参考:

服务以及服务中的方法的参数以及返回值的封装

在grpc中,存在一个.proto文件,运行这个文件会在服务端以及客户端生成一些文件,而这些文件就是对服务、服务中的方法以及方法中的各个参数的封装。

syntax = "proto3";

package com.jjw.grpc;
#服务名称,一个服务中包括多个方法,明确方法的参数类型以及返回值
service MsgService {
  rpc GetMsg (MsgRequest) returns (MsgResponse){}
  rpc two_add(addRequest) returns(addResponse){}
}
#magRequest是对GetMsg方法的参数的封装,
message MsgRequest {
#参数仅有一个String的name,并且这个参数是第一个位置
    string name = 1;
}

message MsgResponse {
    string msg = 1;
}

message addRequest{
#存在有两个参数,分别是int类型的a以及int类型的b,并且a是第一个参数,b是第二个参数
     int32 a=1;
     int32 b=2;
}
message addResponse{
     int32 result=1;
}

之后运行这个文件就会生成两个文件,分别是msg_pd2以及msg_pb2_grpc,这两个文件分别封装了服务中各个方法以及方法中各个参数。以及一些通信调度的封装。

服务端

_ONE_DAY_IN_SECONDS = 60 * 60 * 24

#定义一个服务,这个服务就是msg_pb2_MsgServiceServicer这个服务
class MsgServicer(msg_pb2_grpc.MsgServiceServicer):
    #实现服务中的一个方法
    def GetMsg(self, request, context):
        #拿到请求的参数request
        print("Received name: %s" % request.name)
        #将结果封装到这个方法的返回参数中
        return msg_pb2.MsgResponse(msg='Hello, %s!' % request.name)
    def two_add(self,request,context):
        print("服务端开始计算:"+str(request.a)+"+"+str(request.b)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值