protobuf

Cartographer安装

≯℡__Kan透↙ 提交于 2020-02-22 23:09:47
请注意本文的安装日期2017/12/20,如果距离该时间很遥远,请仅作为参考,毕竟cartographer的代码在不断更新,可能会存在很大的变动。 参考文档: https://google-cartographer.readthedocs.io/en/latest/ https://google-cartographer-ros.readthedocs.io/en/latest/ http://www.cnblogs.com/liangyf0312/p/8028441.html 1. 先装好 wstool 、 rosdep 、ninja 2. 建工作空间 3. 下载cartographer、cartographer_ros、ceres源码。这里也下载了rplidar的代码(略)。 https: / / github.com / ceres - solver / ceres - solver https: / / github.com / googlecartographer / cartographer https: / / github.com / googlecartographer / cartographer_ros yhexie@ubuntu:~$ sudo apt-get install -y python-wstool python-rosdep ninja

微信团队分享:iOS版微信的高性能通用key-value组件技术实践

吃可爱长大的小学妹 提交于 2020-02-13 07:14:28
本文来自微信开发团队guoling的技术分享。 1、前言 本文要分享的是iOS版微信内部正在推广和使用的一个高性能通用key-value 组件的技术实践过程,该组件在微信内部被命名为MMKV(以下简称MMKV)。 MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。希望对于有高性能key-value 组件或类似技术需求的IM同行,能通过本文获得一定的启发。 学习交流: - 即时通讯开发交流群: 320837163 [推荐] - 移动端IM开发入门文章:《 新手入门一篇就够:从零开发移动端IM 》 (本文同步发布于: http://www.52im.net/thread-1461-1-1.html ) 2、MMKV 源起 在 iOS 微信的日常运营中,时不时就会爆发特殊文字引起 iOS 系统的 crash,《 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的? 》一文里面设计的技术方案是在关键代码前后进行计数器的加减,通过检查计数器的异常,来发现引起闪退的异常文字。 《 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的? 》里设计的技术方案大致原理就是: 1)在会话列表、会话界面等有大量 cell 的地方,希望新加的计时器不会影响滑动性能; 2

protobuf enum 的int 与 string 互转

走远了吗. 提交于 2020-02-12 18:45:21
c/c++ enum 介绍 说起c/c++ 的enum,比起python 真的是方便简洁 enum type{ type1 = 0, type2 } enum的元素对应的int 默认从0 开始依次增加, 除非手动指定起始值。 int val = type1; assert(val == 0) enum 内的元素是全局的,意味着在其它地方直接使用 type type_1 = type1 ; C++ 11 引入 enum class, 这样里面的元素不再是全局了 enum class int32_t type{ type1 = 0, type2 } 这样在使用的时候必须是 type type_1 = type::type1 , 并且可以指定底层类型例如uint8 等。 并且c++11 种enum 不能隐式转换了,必须强转 type type_1 = type::type1; int32_t type_impliticy_convert = type_1; // wrong int32_t type_impliticy_convert = static_cast<int32_t >(type_1); // ok enum方便,但是如果要转换成string很麻烦,必须一个个匹配。而且与int 互转而且还要考虑索引边界 引出正题,protocbuf 提供的enum 就比较方便了

关于GRPC的讲解

青春壹個敷衍的年華 提交于 2020-02-11 07:16:36
gRPC服务发现&负载均衡 https://segmentfault.com/a/1190000008672912?utm_source=tag-newest GRPC编程指南 gRPC 介绍   gRPC 是谷歌开源的高性能 RPC 框架。RPC 也即远程方法调用,对于 RPC client 来说,它可以调用远程 server 上的某个方法,看起来就像是在调用本地方法一样。区别就在于,通过 RPC 调用远程方法时,数据经过序列化之后会通过网络发送给远程 server,远程 server 执行方法之后,同样会将返回结果序列化之后发送回 client。在分布式系统中,gRPC 可以用来解耦程序的逻辑,不同组件之间通过 gRPC 进行通信。   gRPC 使用 Protobuf 作为它的数据序列化的工具,Protobuf 会将数据序列化成二进制的数据流。与 JSON 这类文本形式的数据相比,二进制数据显得更加紧凑和便于解析,在网络传输中,二进制数据由于体积更小,传输也更快。另一方面,gRPC 也是跨多种编程语言的,譬如说,一个 Java 的 client 可以与一个 C++ 的 server 通信。 在 Linux 安装 gRPC   在 Ubuntu 16.04 中,通过下面的步骤就可以安装好 gRPC 和 Protobuf。 1 2 3 4 5 6 7 8 9 10 11 sudo

Hadoop(三)---linux编译hadoop2.x

北城余情 提交于 2020-02-11 06:22:24
一、准备的资料 · 64位linux系统。我使用的是 CentOS · JDK 1.7+。注:使用1.7即可,如果是1.8则会编译失败,1.6没有试过,看网上大牛的帖子说也能过 · maven-3.2.5。 这是apache的一个产品,hadoop的编译要就是3.0以上 · protobuf 注:谷歌的产品,最好是提前百度准备一下这个文件 · hadoop-2.5.2-src 这个可以到Apache的官网上去下载 · ant-1.9.4 这个也是Apache的,在文章最后附的参考链接中有关于下载的百度网盘地址 这些文件,需要上传到linux系统中,我使用的是SSH来进行上传的,直接上传到了 /root 目录下。同时由于安装过程中需要在线下载东西,古需要保持linux系统的网络畅通。 二、安装JDK JDK的安装百度一下有很多文章,我使用的是 jdk-7u71-linux-x64.tar.gz。在oracle的官网上也能够下载。jdk的安装在linux下就是一个加压缩的过程。 1 cd /root 2 tar -zxvf jdk-7u71-linux-x64.tar.gz 3 配置环境变量:vim /etc/profile 4 输入命令进入编辑模式:i 5 在文件最后添加:export JAVA_HOME=/root/jdk1.7.0_71 6 export PATH=.:$PATH

mac 安装protobuf 2.5.0

感情迁移 提交于 2020-02-11 01:13:51
mac 安装protobuf 2.5.0 1.下载安装包 目前protobuf的最新版本是3.5.0,但是hadoop等好多框架依然依赖的是2.5.0,因此,最好不要安装最新的。现在官网已经没有下载链接,下面这个是我很久之前搭建环境时保存下来的。 链接: https://pan.baidu.com/s/1pKTSwfp 密码: j13q 2.编译安装 解压到安装目录,并进入安装目录 $ cd protobuf-2.5.0 以此执行以下命令: ./configure make make check make install 3.验证 protoc --version 如果出现 libprotoc 2.5.0则说明安装成功。 注: 卸载protobuf执行以下命令: which protoc 然后 sudo rm 这个目录,如: sudo rm /usr/local/bin/protoc 来源: CSDN 作者: Wuli波板糖 链接: https://blog.csdn.net/P397226804/article/details/104253792

protobuf示例

我的梦境 提交于 2020-02-09 03:20:06
Google protobuf 是一个高性能的序列化结构化数据存储格式的接口描述语言 ,具有多语言支持,协议数据小,方便传输,高性能等特点。通过将 结构化 数据序列化 (串行化 ) 成二进制数组,并将二进制数组反序列化成数据对象。用于取代 JSON , XML ,作为服务器通信协议。 google 将 protobuf 协议 用于 RPC 系统和持续数据存储系统。 Protobuf 的主要优点就是:简单,快。 1. 首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message 。 proto 文件非常类似 java 或者 C 语言的数据定义。 package lm; message helloworld { required int32 id = 1; // ID required string str = 2; // str optional int32 opt = 3; //optional field } 2. 编译 protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto 3. 应用示例 writer- 写入磁盘 #include "lm.helloworld.pb.h" … int main(void) { lm:

Protocol Buffers学习教程

时光毁灭记忆、已成空白 提交于 2020-02-08 23:04:31
最近看公司代码的过程中,看到了很多proto后缀的文件,这是个啥玩意?问了大佬,原来这是Protocol Buffers! 这玩意是干啥的?查完资料才知道,又是谷歌大佬推的开源组件,这玩意完全可以取代XML和JSON的数据交换格式,而且更加快! Protocol Buffer 即 PB 是大 Google 公司推行的一套混合语言数据标准, 标准介绍如下: 是 Google 开源的一种轻便高效的结构化数据存储格式,可以用于结构化数据的串行化,也称作序列化,主要用于数据存储或是 RPC 数据交换,支持多语言,可拓展. 它很适合做数据存储或 RPC 数据交换格式. 可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 感觉是不是比较抽象? 简单而言, 它的出现就是想打败 xml & json, pb 其实和他俩差不多。 既然是 Google 推行的, 肯定是采用开源策略, 附上 github 地址 (目前 star 超过 2W) PB 首页 地址 优点 ◇性能好 / 效率高 ◇代码生成机制 – 这个后面说 ◇支持 “向后兼容” 和 “向前兼容” ◇支持多种编程语言 缺点 ◇二进制格式导致可读性差 为了提高性能,protobuf 采用了二进制格式进行编码。这直接导致了可读性差的问题(严格地说,是没有可读性) ◇缺乏自描述 一般来说,XML 是自描述的,而

在Android Studio配置google protobuf

二次信任 提交于 2020-02-08 12:30:13
1、在project的build.gradle中配置 buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0' } } 注意 Gradle版本至少是 2.12 并且 Java 7 ,本例子使用的是 2.2.3 , protobuf-gradle-plugin 使用最新的 0.8.0 版本。 2、在app的build.gradle中配置 ... apply plugin: 'com.google.protobuf' ... protobuf { //这里配置protoc编译器 protoc { artifact = 'com.google.protobuf:protoc:3.0.0-alpha-3' } plugins { javalite { // The codegen for lite comes as a separate artifact artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0' } } /

gRPC简介和实践

北城以北 提交于 2020-02-07 11:38:09
简介 gRPC是Google主导的一个高性能,跨语言的RPC(远程过程调用)框架。官网: https://grpc.io/ 支持多种常见的流行编程语言,如C++ Java Node.js PHP Python等等。 其实从本质上来看到gRPC其实是基于使用protobuf做为数据传输格式,借助HTTP2协议通信做的一个RPC框架,只要任何语言实现了gRPC的规范即可以实现跨平台调用。类比Restful Api使用json作为数据传输格式,over HTTP1.1进行通信,大致也就这么回事,没想象中那么复杂。 跨语言和跨平台很大功劳在于Google推出的这个protobuf数据传输格式。我们可以把它看做和json xml一类作用的东西。 protobuf数据格式被编译后形成二进制数据,相对json等传输格式,解析效率高,压缩体积小,并且能够明确传递数据的数据类型等等。 1.什么是protobuf? 详细信息可以参考官方文档与介绍: https://developers.google.com/protocol-buffers/ 2.实践 采用PHP作为client, Golang作为Server端模拟一个用户登录过程。(PHP目前只支持作为客户端的角色实现。我们知道由于PHP语言特性本身不支持内置提供强大的HTTP服务,借助于fasgic与nginx或者apache等工作