gRPC学习以及实践

本文介绍了gRPC的基本概念、与HTTP的对比,以及如何使用gRPC进行远程过程调用。通过示例详细阐述了gRPC的使用步骤,包括protobuf定义、编译、服务端和客户端的实现,以及gRPC与HTTP接口的融合。同时,文章提供了gRPC在微服务架构中的重要性,并提到可以结合Go框架如echo、gin进行应用。
摘要由CSDN通过智能技术生成

相信大家都听过RPC、HTTP、Socket等协议,他们均可用于业务中来进行数据通信,又根据各自协议的特点,应用场景也比较多样、复杂,那大家是否听过或者了解gRPC呢?用来做什么呢?我们就来了解一下gRPC以及其用途。

介绍

用官方网站1一句话介绍介绍gRPC

A high-performance, open source universal RPC framework.

即:高性能、开源的通用型RPC框架

说起RPC,人们常会和HTTP做对比,两者在底层数据传输时本质基本一致,即全部基于TCP实现安全可靠的连接进行数据通信,但在应用层又有些不同。

RPC,即Remote Procedure Call(远程过程调用),主要在TCP协议之上进行工作;

HTTP,即HyperText Transfer Protocol(超文本传输协议),主要在HTTP协议之上进行工作。

从协议上来说,RPC更加高效一些。

gRPC结构图:
gRPC
gRPC基本基于定义服务的思想,指定远程调用的方法,包含方法的入参以及返回数据类型。服务端继承、实现接口并开启监听服务等待客户端请求;客户端保存一份副本,提供与服务端相同的方法。客户端、服务端的语言没有特别限制,只要支持gRPC协议基本可实现客户端、服务端的连接、数据通信。

目前gRPC支持的语言大致有:Golang、Python、Java、PHP、C&C++等。

gRPC的创建基于Protobuf,进行数据定义、服务接口定义等等,所以在深入了解gRPC前,最好对于protobuf有一定的了解。protobuf有proto2、proto3版本,现在大都基于proto3进行开发,所以大家了解proto32

基于gRPC实现restful接口,主要使用gRPC的一个插件,使得服务端通过一套代码即可对外提供HTTP服务、RPC服务,其架构如下图:
gRPC-gateway

gRPC使用

gRPC的使用通常有如下几步:

  1. 编写Protobuf,定义RPC的接口以及入参、出参,数据类型等
  2. 基于Protobuf编译成项目语言的文件,如go、java等
  3. 实现服务端功能模块,主要实现gRPC的接口
  4. 实现客户端功能

gRPC示例

Demo文件结构
.
├── example
│   ├── service.pb.go // 编译后的rpc文件
│   ├── service.pb.gw.go // 编译后的gateway文件
│   └── service.proto // protobuf文件
├── gw.go // gRPC的gateway服务端
├── gw_client.go // gRPC客户端
└── gw_server.go // gRPC服务端
1. 通过protobuf定义数据结构、类型
syntax = "proto3";

package example;

import "google/api/annotations.proto";

message StringMessage {
   
    string value = 1;
}

// 定义EchoServer
service EchoService {
   
    // 定义Echo接口,以及参数、返回数据
    rpc Echo(StringMessage) returns (StringMessage) {
   
        option (google.api.http) = {
   
          post: "/v1/example/echo" // 定义http服务的请求方法(post)、路由
          body: "*"
        };
    }
}
2. 编译protobuf文件为指定语言

demo主要为go语言,故而将protobuf编译为go语言版本,使用的命令为以下两条:

  • 编译为RPC数据结构、类型、服务

    protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值