• grpc和protobuf在一起


    目录

    gRPC 简介

    使用protobuf

    protobuf版本


    gRPC 简介

    gRPC 可以使用protobuf作为它的接口定义语言 ( IDL ) 和它的底层消息交换格式。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使你更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。在服务端,服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中仅称为客户端),它提供与服务器相同的方法。

    gRPC 客户端和服务器可以在各种环境中运行和相互通信——从 Google 内部的服务器到你自己的桌面——并且可以用任何 gRPC 支持的语言编写。因此,例如,你可以使用 Go、Python 或 Ruby 中的客户端轻松地在 Java 中创建 gRPC 服务器。此外,最新的 Google API 将具有其接口的 gRPC 版本,让你可以轻松地将 Google 功能构建到你的应用程序中。

    使用protobuf

    默认情况下,gRPC 使用protobuf, 谷歌成熟的结构化数据序列化开源机制(虽然它可以与其他数据格式如 JSON 一起使用)。这是它如何工作的快速介绍。如果你已经熟悉protobuf,请随时跳到下一部分。

    使用protobuf的第一步是定义要在proto 文件中序列化的数据的结构:这是一个带有.proto扩展名的普通文本文件。protobuf数据被结构化为 消息,其中每条消息都是一个小的信息逻辑记录,包含一系列称为字段的名称-值对。这是一个简单的例子:

    1. message Person {
    2. string name = 1;
    3. int32 id = 2;
    4. bool has_ponycopter = 3;
    5. }

    然后,一旦你指定了你的数据结构,你就可以使用protobuf编译器protoc从你的原型定义中以你喜欢的语言生成数据访问类。这些为每个字段提供了简单的访问器,例如name()and set_name(),以及将整个结构序列化/解析到原始字节的方法。因此,例如,如果你选择的语言是 C++,则在上面的示例中运行编译器将生成一个名为Person. 然后,你可以在应用程序中使用此类来填充、序列化和检索Personprotobuf消息。

    你在普通的 proto 文件中定义 gRPC 服务,将 RPC 方法参数和返回类型指定为protobuf消息:

    1. // The greeter service definition.
    2. service Greeter {
    3. // Sends a greeting
    4. rpc SayHello (HelloRequest) returns (HelloReply) {}
    5. }
    6. // The request message containing the user's name.
    7. message HelloRequest {
    8. string name = 1;
    9. }
    10. // The response message containing the greetings
    11. message HelloReply {
    12. string message = 1;
    13. }

    gRPC 使用protoc特殊的 gRPC 插件从你的 proto 文件生成代码:你将获得生成的 gRPC 客户端和服务器代码,以及用于填充、序列化和检索消息类型的常规protobuf代码。你将在下面看到一个示例。

    protobuf版本

    一般来说,虽然你可以使用 proto2(当前的默认protobuf版本),但我建议你将 proto3 与 gRPC 一起使用,因为它可以让你使用 gRPC 支持的所有语言,并避免与 proto2 客户端对话的兼容性问题proto3 服务器,反之亦然。

  • 相关阅读:
    web开发概述——Servelt技术
    OSINT技术情报精选·2024年5月第4周
    【面试题分享】重现 string.h 库常用的函数
    1. 测度论-概率空间的基本概念
    C++ -- 学习系列 关联式容器 set 与 map
    自学(网络安全)黑客——高效学习2024
    3:第一章:认识JVM规范2:JVM规范,简介;
    虚拟机里为什么桥接模式可以广播,NAT模式不能广播?
    一种用于干式脑电图的高密度256通道电极帽
    C++数据结构-高效排序算法
  • 原文地址:https://blog.csdn.net/zhpCSDN921011/article/details/126905895