• 【gRPC】快速入门


    介绍

    rpc也叫远程过程调用,允许一台服务器调用远程的另一台服务器中的代码,并获取返回值。grpc是一款与语言,平台无关的rpc,默认基于protobuf序列化与反序列化协议

    安装ProtoBuf通用编译器

    protobuf优势

    1、体积小
    2、速度快
    3、跨平台多语言
    4、兼容性好

    为什么要下载这个

    因为protobuf的序列化和反序列化过程很复杂,所以我们需要一个中间工具帮我们自动生成代码。
    如果能自己手写,也可以不下👻

    下载地址

    https://github.com/protocolbuffers/protobuf/releases
    在这里插入图片描述
    ps:如果是32位系统或者是linux系统就选择上面哪些

    后续

    下载完毕后,解压,配置环境变量,即可
    在这里插入图片描述
    在这里插入图片描述

    安装go专用编译器

    说明

    上面那个只是通用编译器,需要搭配go语言的特定编译器功能才完整

    下载

    go get github.com/golang/protobuf/protoc-gen-go
    直接在终端安装即可,不需要配置环境变量,因为它已经下载到gopath里面了

    写一个Helloworld

    新建一个go项目

    在这里插入图片描述

    首先需要定义数据格式,编译器才知道如何去构建代码

    protofile/helloworld.proto
    在这里插入图片描述

    生成代码

    在终端下执行
    protoc --go_out=./ helloworld.proto
    这里解释下为什么helloworld.proto中已经指定了输出文件夹还要指定go_out,这两个参数其实是一起工作的,最终的生成路径就是go_out+go_package拼接的结果
    在这里插入图片描述
    看到这样子一个文件,就说明成功了

    纠错一下

    这个最好不要把生成的代码放到proto文件夹下面,这样子proto和刚刚go get下来的那个包名冲突了,所以最好改一下(后面我改成proto_obj了)

    测试

    在这里插入图片描述
    在这里插入图片描述

    测试代码比较简单,就不多说了

    proto语法再探究

    字段修饰符

    required:表示该字段不能为空(proto3已经取消了,变成默认值了)
    optional:表示该字段可以为空
    repeated:相当于数组

    嵌套使用和嵌套定义

    在这里插入图片描述
    在这里插入图片描述

    定义服务

    相当于定义接口,后面会用到
    在这里插入图片描述

    grcp实例

    项目结构

    在这里插入图片描述

    编写proto

    在这里插入图片描述

    生成代码

    protoc --go_out=plugins=grpc:./ .\product.proto
    这里生成了.pb.go文件后需要按照上面的项目结构分别复制到客户端和服务端

    编写服务端

    在这里插入图片描述
    在这里插入图片描述

    编写测试客户端

    在这里插入图片描述

    测试

    分别运行服务端、客户端,发现客户端能正常输出服务端返回的数据,说明成功了

  • 相关阅读:
    176. 第二高的薪水
    C#几种截取字符串的方法
    Tomcat安装及配置教程
    做着做着感觉自媒体做不下去了?
    高级运维学习(九)块存储、文件系统存储和对象存储的实现
    入栏需看——学习记忆
    网工内推 | 运维工程师,CCNP认证优先,周末双休,多次调薪机会
    《攻守道》笔记(3)
    【C++】STL—— unordered_map的介绍和使用、 unordered_map的构造函数和迭代器、 unordered_map的增删查改函数
    单片机C语言实例:23、串口通讯
  • 原文地址:https://blog.csdn.net/qq_31618549/article/details/126797698