摘要: Generating Your Classes - 生成类 要生成Java、Python、C++、Go、Ruby、ObjuleC或C代码,需要使用.proto文件中定义的消息类型,还需要在.proto上运行协议缓冲区编译器protoc。如果尚未安装编译器,请下载该软件包并按照自述文件中的说明进行操作 阅读全文
posted @ 2021-01-13 18:20 Theo·Chan 阅读(334) 评论(0) 推荐(0) 编辑
摘要: Options - 选项 .proto文件中的单个声明可以使用许多 选项 进行注释。选项不会更改声明的总体含义,但可能会影响在特定上下文中处理声明的方式。可用选项的完整列表在google/protobuf/descriptor.proto中定义。 有些选项是文件级选项,这意味着它们应该写在顶级作用域 阅读全文
posted @ 2021-01-13 18:18 Theo·Chan 阅读(496) 评论(0) 推荐(0) 编辑
摘要: JSON Mapping - JSON映射 Proto3支持JSON中的规范编码,使得在系统之间共享数据更加容易。下表按类型对编码进行了描述。 如果JSON编码的数据中缺少一个值或者它的值为null,那么在解析到协议缓冲区时,它将被解释为适当的默认值。如果某个字段在协议缓冲区中有默认值,则在JSON 阅读全文
posted @ 2021-01-13 18:17 Theo·Chan 阅读(1088) 评论(0) 推荐(0) 编辑
摘要: Defining Services - 定义服务 如果要在RPC(Remote Procedure Call,远程过程调用)系统中使用消息类型,可以在.proto文件中定义RPC服务接口,协议缓冲区编译器将根据所选语言生成服务接口代码和存根。因此,例如,如果您想用一个方法定义一个RPC服务,该方法接 阅读全文
posted @ 2021-01-13 18:14 Theo·Chan 阅读(454) 评论(0) 推荐(0) 编辑
摘要: Packages - 包 可以向.proto文件中添加可选的package明符,以防止协议消息类型之间的名称冲突。 package foo.bar; message Open { ... } 然后你可以在定义你的消息类型的字段时使用包说明符: message Foo { ... foo.bar.Op 阅读全文
posted @ 2021-01-13 18:11 Theo·Chan 阅读(239) 评论(0) 推荐(0) 编辑
摘要: Maps - 映射 如果要创建关联映射作为数据定义的一部分,协议缓冲区提供了一种方便的快捷语法: map<key_type, value_type> map_field = N; …其中key_type可以是任何整型或字符串类型(因此,除了浮点类型和字节之外的任何标量类型)。注意enum不是一个有效 阅读全文
posted @ 2021-01-13 18:10 Theo·Chan 阅读(253) 评论(0) 推荐(0) 编辑
摘要: Oneof - Oneof结构 如果消息包含多个字段,并且最多只能同时设置一个字段,则可以使用oneof功能强制执行此行为并节省内存。 oneof字段与常规字段类似,但oneof共享内存中的所有字段除外,并且oneof最多只能同时设置一个字段。设置oneof的任何成员将自动清除所有其他成员。您可以使 阅读全文
posted @ 2021-01-13 18:09 Theo·Chan 阅读(2002) 评论(0) 推荐(0) 编辑
摘要: 未知字段和任意类型篇幅较少,因此将他们合并到本文进行描述。 Unknown Fields - 未知字段 未知字段是格式良好的协议缓冲区序列化数据,表示解析器无法识别的字段。例如,当一个旧二进制代码解析一个带有新字段的新二进制代码发送的数据时,这些新字段在旧二进制代码中成为未知字段。 最初,proto 阅读全文
posted @ 2021-01-13 17:32 Theo·Chan 阅读(954) 评论(0) 推荐(0) 编辑
摘要: Updating A Message Type - 更新消息类型 如果现有的消息类型不再满足您的所有需要(例如,您希望消息格式有一个额外的字段),但是您仍然希望使用用旧格式创建的代码,不要担心!在不破坏任何现有代码的情况下更新消息类型非常简单。记住以下规则: 不要更改任何现有字段的字段编号。 如果添 阅读全文
posted @ 2021-01-13 17:28 Theo·Chan 阅读(244) 评论(0) 推荐(0) 编辑
摘要: Nested Types - 嵌套类型 您可以在其他消息类型中定义和使用消息类型,如以下示例所示——这里的Result消息是在SearchResponse消息中定义的: message SearchResponse { message Result { string url = 1; string 阅读全文
posted @ 2021-01-13 17:18 Theo·Chan 阅读(416) 评论(0) 推荐(0) 编辑
摘要: Using Other Message Types - 使用其他消息类型 可以将其他消息类型用作字段类型。例如,假设您希望在每个SearchResponse消息中包含Result消息——为此,您可以在同一.proto中定义Result消息类型,然后在SearchResponse中指定类型为Resul 阅读全文
posted @ 2021-01-13 17:16 Theo·Chan 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 枚举类型 定义消息类型时,可能希望其中一个字段只包含预定义值列表中的一个。例如,假设您想为每个SearchRequest添加一个corpus(语料库)字段,其中语料库的值可以是UNIVERSAL、WEB、IMAGES、LOCAL、NEWS、PRODUCTS或VIDEO。您只需在消息定义中添加一个枚举 阅读全文
posted @ 2021-01-13 17:12 Theo·Chan 阅读(1207) 评论(0) 推荐(0) 编辑
摘要: 默认值 解析消息时,如果编码的消息不包含特定的单数元素,则解析对象中的相应字段将设置为该字段的默认值。这些默认值是特定于类型的: string:默认值为空字符串 bytes:默认值为空字节 boolean:默认值为false 数值类型:默认值为0 枚举:默认值为第一个定义的枚举值,该值必须是0 消息 阅读全文
posted @ 2021-01-13 17:10 Theo·Chan 阅读(1001) 评论(0) 推荐(0) 编辑
摘要: 标量值类型 标量消息字段可以具有以下类型之一 —— 下表显示了.proto文件中指定的类型,以及自动生成的类中相应的类型: .proto Type 说明 C++ Type Java Type Python Type[2] Go Type Ruby Type C# Type PHP Type Dart 阅读全文
posted @ 2021-01-13 16:54 Theo·Chan 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 定义消息类型 首先让我们看一个非常简单的例子。假设您想定义一个搜索请求消息格式,其中每个搜索请求都有一个查询字符串、您感兴趣的特定结果页以及每页的结果数。下面是用于定义.proto消息类型的文件。 syntax = "proto3"; message SearchRequest { string q 阅读全文
posted @ 2021-01-13 16:34 Theo·Chan 阅读(769) 评论(0) 推荐(0) 编辑
摘要: Language Guide (proto3) | gRPC proto3 语言指南-开篇 gRPC:一个高性能、开源的通用RPC框架,它可以使用Protobuf定义服务 Protobuf:协议缓冲区是一种与语言无关、与平台无关的可扩展机制,用于序列化结构化的数据(参考JSON) proto3:proto是一种语言规范,Protobuf就遵循这种语言规范,目前最高版本是proto3 阅读全文
posted @ 2021-01-13 15:37 Theo·Chan 阅读(437) 评论(0) 推荐(0) 编辑
摘要: Quartz.Net 组件的封装使用 Quartz.Net是面向.NET的一款功能齐全的开源作业调度组件,你可以把它嵌入你的系统中实现作业调度,也可以基于Quartz.Net开发一套完整的作业调度系统。它既支持简单的timer,也支持灵活强大的corn表达式。本文提供了一种把Quartz.Net嵌入 阅读全文
posted @ 2021-01-13 14:38 Theo·Chan 阅读(1314) 评论(2) 推荐(1) 编辑
摘要: Quartz.Net 组件的封装使用 Quartz.Net是面向.NET的一款功能齐全的开源作业调度组件,你可以把它嵌入你的系统中实现作业调度,也可以基于Quartz.Net开发一套完整的作业调度系统。它既支持简单的timer,也支持灵活强大的corn表达式。本文提供了一种把Quartz.Net嵌入 阅读全文
posted @ 2021-01-13 14:25 Theo·Chan 阅读(212) 评论(0) 推荐(0) 编辑