protobuf

我的Protobuf消息设计原则

拥有回忆 提交于 2019-12-04 01:04:43
网络通信涉及到消息的定义,不管是使用二进制模式、xml、json等格式。消息都可以大体的分为 命令消息、请求消息、应答消息和指示消息4大消息类型。一般情况下每个消息还还有包含一个序列号和一个能够唯一区分类型类型的消息编号,编号可以使用字符串、整数或者枚举等。 1. 使用 protobuf 的enum定于消息的编号,也就是消息的类型。 我会为每个系统都定义一个MSG枚举。包含系统用到的所有消息的枚举编号 enum MSG { Login_Request = 0x00001001; Login_Response = 0x00001002; XXX_Request = 0x00001003; XXX_Request = 0x00001004; XXX_Command = 0x00002001; XXX_Indication = 0x00003001; } 2. 会为每个具有消息体的消息定义一个对应的protobuf message。例如Login_Request会有一个对应LoginRequest消息。 message LoginRequest { required bytes username = 1; required string password = 2; } 3. 会为每个消息大类定义一个消息,例如命令消息全部包含在message Command中

Google Protocol Buffers 学习笔记

亡梦爱人 提交于 2019-12-04 01:04:17
Google Protocol Buffers 学习 Protocol Buffers ( PB )是一个用于序列化结构化数据的机制,是谷歌的一个开源项目,在 github 上有源代码,也有发行版。 PB 跟 XML 相似, XML 序列化的时候速度是可以接受的,但是 XML 解析数据的时候非常慢。然而 Protocol Buffers 则是非常轻量,速度也很快。 我们学习 Protocol Buffers ,直接通过实现一个 Protocol Buffers 小项目来实验,得出其源代码,再分析编码技术。 安装完 Protocol Buffers 之后(安装过程略去,我们选择的是 Github 上面的源代码 c++ 版,而不是发行版,有利于我们学习编码技术),我们开始正式实验。 关于 PB 的编码 由官方文档, PB 先用 variant 编码整形数据,然后再进行操作 我们打开编译好的源代码我们找到了这样一条在序列化的时候所调用的函数 if (has_sid()) { ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->sid(), output); } 使用 gdb 调试,尝试进入函数体内部,发现其调用: src/google/protobuf/message.cc:174 的一个函数 bool

protobuf

为君一笑 提交于 2019-12-04 00:57:12
protobuf是一种高效的数据格式,平台无关、语言无关、可扩展,可用于 RPC 系统和持续数据存储系统。 protobuf protobuf介绍 Protobuf 是 Protocol Buffer 的简称,它是Google公司于2008年开源的一种高效的平台无关、语言无关、可扩展的数据格式,目前Protobuf作为接口规范的描述语言,可以作为Go语言RPC接口的基础工具。 protobuf使用 protobuf 是一个与语言无关的一个数据协议,所以我们需要先编写IDL文件然后借助专用工具生成指定语言的代码,从而实现数据的序列化与反序列化过程。 大致开发流程如下: 1. IDL编写 2. 生成指定语言的代码 3. 序列化和反序列化 protobuf语法 protobuf3语法指南 编译器安装 ptotoc protobuf 协议编译器是用c++编写的,根据自己的操作系统下载对应版本的 protoc 编译器: https://github.com/protocolbuffers/protobuf/releases,解压后拷贝到`GOPATH/bin`目录下 。 protoc-gen-go 安装生成Go语言代码的工具 go get -u github.com/golang/protobuf/protoc-gen-go 编写IDL代码 在 protobuf_demo/address

Kafka Streams开发入门(4)

爷,独闯天下 提交于 2019-12-03 13:17:38
背景 上一篇 演示了filter操作算子的用法。今天展示一下如何根据不同的条件谓词(Predicate)将一个消息流实时地进行分流,划分成多个新的消息流,即所谓的流split。有的时候我们想要对消息流中的不同消息类型进行不同的处理逻辑,此时流split功能就显得非常的实用。 演示功能说明 今天依然使用表征一个电影的消息类型,格式如下: { "name": "Meryl Streep", "title": "The Iron Lady", "genre": "drama"} { "name": "Will Smith", "title": "Men in Black", "genre": "comedy"} { "name": "Matt Damon", "title": "The Martian", "genre": "drama"} { "name": "Judy Garland", "title": "The Wizard of Oz", "genre": "fantasy"} name是主演,title是影片名,genre是影片类型。我们今天使用Kafka Streams来演示将不同genre类型的影片split到不同的消息流中。 值得一提的是,我们今天依然使用protocol buffer对消息进行序列化和反序列化。 初始化项目 第一步是对项目进行初始化

Jmeter protobuf testing. Could not read Protobuf message

匿名 (未验证) 提交于 2019-12-03 09:18:39
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am testing one project via protobuf protocol and using HTTP Request Sampler. The target appserver is also written on Java. There is a problem with errors in reponses: "Could not read Protobuf message: Protocol message contained an invalid tag (zero).; nested exception is com.google.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero)" The case is that it is happening not in 100% requests. When i used HttpClient4 it was about 30-40% of failed requests. After i changed it to HttpClient3.1 error rate

Protobuf-数据编码规则

自古美人都是妖i 提交于 2019-12-03 09:08:45
参考文档: https://developers.google.cn/protocol-buffers/docs/encoding 文章是本人对官方文档的理解,可能理解有误,望指正。^^ 1.A Simple Message 简单消息格式 protobuf中的最简单的消息定义: message Test1 { optional int32 a = 1; } 如果将a赋值150,它的字节流(16进制表示)如下: 08 96 01 转换为二进制表示如下: 0 8 9 6 0 1 → 0000 1000 1001 0110 0000 0001 标志位 字段编号 字段类型 标志位 低位字段值 标志位 高位字段值 0 0001 000 1 0010110 0 0000001 protobuf都是以8bit(1byte)为一个解析单元。 标志位 0:表示解析单元结束,后一个字节是新的解析单元,1:表示解析单元未结束,后一个字节是这个解析单元的高位部分。 字段编号:protobuf的消息体的字段编号,如上所示,转换为十进制是1 字段类型:protobuf的消息体的字段类型,转换为十进制是0 字段类型对照表 类型值 类型名 使用场景 0 Varint int32, int64, uint32, uint64, sint32, sint64, bool, enum 1 64-bit fixed64,

How to build Google's protobuf in Windows using MinGW?

匿名 (未验证) 提交于 2019-12-03 09:02:45
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm using Codeblocks as my IDE with MingGW. I'm trying to use google protocol buffers, but I'm having trouble building the protobuf. The readme file for protobuf says: If you are using Cygwin or MinGW, follow the Unix installation instructions, above. The Unix instructions says: To build and install the C++ Protocol Buffer runtime and the Protocol Buffer compiler (protoc) execute the following: $ ./configure $ make $ make check $ make install I don't know how to perform these in Windows because "configure" is a Unix script and I don't know

PROTOBUF_INLINE_NOT_IN_HEADERS

匿名 (未验证) 提交于 2019-12-03 09:02:45
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm trying to install Open Transactions, the open-source project, on a debian 8. I've installed all the dependencies and am having an issue when compiling (make). The following error is showing at my terminal, even though i made sure to install the protobuf project: In file included from /root/opentxs/src/../include/opentxs/core/OTStoragePB.hpp:64:0, from /root/opentxs/src/core/OTStorage.cpp:47: /root/opentxs/build/src/core/otprotob/Generics.pb.h:501:6: error: "PROTOBUF_INLINE_NOT_IN_HEADERS" is not defined [-Werror=undef] #if !PROTOBUF

Tensorflow won't build with CUDA support

匿名 (未验证) 提交于 2019-12-03 09:02:45
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I've tried building tensorflow from source as described in the installation guide . I've had success building it with cpu-only support and with the SIMD instruction sets, but I've run into trouble trying to build with CUDA support. System information: Mint 18 Sarah 4.4.0-21-generic gcc 5.4.0 clang 3.8.0 Python 3.6.1 Nvidia GeForece GTX 1060 6GB (Compute capability 6.1) CUDA 8.0.61 CuDNN 6.0 Here's my attempt at building with CUDA, gcc, and SIMD: kevin@yeti-mint ~/src/tensorflow $ bazel clean INFO: Starting clean (this may take a while).

Cannot import com.google.cloud.speech.v1.SpeechGrpc in Android

匿名 (未验证) 提交于 2019-12-03 08:56:10
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm trying to use Google's Speech API in Android project. The example project works. I'm having trouble to use it in my own android app. build.gradle(Module:app) : apply plugin: 'com.android.application' apply plugin: 'com.google.protobuf' ext { supportLibraryVersion = '25.4.0' grpcVersion = '1.4.0' } android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { applicationId "ApplicationID" minSdkVersion 16 targetSdkVersion 24 // compileOptions { // sourceCompatibility JavaVersion.VERSION_1_5 // targetCompatibility JavaVersion