protobuf

Protobuf 简介及简单应用

假如想象 提交于 2020-01-21 23:25:28
Protobuf 是 protocol buffers 的缩写. 根据 官网 的说法, protocol buffers 与平台无关, 与语言无关, 实现数据序列化的一种手段. 正如名字一样, protobuf 可以将数据按照规定的协议(protocol)序列化为二进制的数据(buffers). 序列化的数据基本上可以保证类型安全, 并且可以压缩大小. 这篇文章将简单说说关于 protobuf 的优点和问题, 如果有使用的需要可以作为参考 安装和使用 Protobuf 是在 github 上开源的项目, 地址在 这里 . 因为 protobuf 的编译器是用 C++ 写的, 所以可以通过 C++ 的安装方式来安装. mac 用户的话由于没有 apt-get, 按照安装说明中要使用的命令行工具可以用 homebrew 安装 经过漫长的下载, 编译, 安装, 没有显示错误, 恭喜🎉, 可以正式开始使用 protobuf 了 首先按照 protobuf 的语法(格式?)来写一个 .proto 文件 // BookInfo.proto syntax = "proto3"; message BookInfo { int64 id = 1; string title = 2; string author = 3; } 因为 protobuf 与语言无关, 因此接下来请按照 github

序列化与反序列化

末鹿安然 提交于 2020-01-20 18:10:24
为什么我们需要序列化 存储/传输 IPC/RPC IPC,Inter-Process Communication,进程间通信 RPC,Remote Procedure Call,远程过程调用 序列化的类型 文本 字节 ProtoBuf 来源: https://www.cnblogs.com/johnnyzhao/p/12218845.html

Netty客户端代码+protobuf

隐身守侯 提交于 2020-01-19 17:35:52
package com.oztf.common.netty; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.protobuf.ProtobufDecoder; import io.netty.handler.codec.protobuf.ProtobufEncoder; import io.netty.handler.codec

gRPC详解

隐身守侯 提交于 2020-01-19 01:52:59
gRPC是什么? gRPC是什么可以用官网的一句话来概括 A high-performance, open-source universal RPC framework 所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。 如下图所示就是一个典型的RPC结构图。 RPC通信 gRPC有什么好处以及在什么场景下需要用gRPC 既然是server/client模型,那么我们直接用restful api不是也可以满足吗,为什么还需要RPC呢?下面我们就来看看RPC到底有哪些优势 gRPC vs. Restful API gRPC和restful API都提供了一套通信机制,用于server/client模型通信,而且它们都使用http作为底层的传输协议(严格地说, gRPC使用的http2.0,而restful api则不一定)。不过gRPC还是有些特有的优势,如下: gRPC可以通过protobuf来定义接口,从而可以有更加严格的接口约束条件。关于protobuf可以参见笔者之前的小文 Google Protobuf简明教程 另外,通过protobuf可以将数据序列化为二进制编码

Windows下 VS Code搭建C++和opencv开发环境

一世执手 提交于 2020-01-18 02:39:50
目前大部分人都是用VS开发opencv,只有少部分人用VS Code开发,我一直觉得VS Code是个神器,所以我就决定将它搭建成一个全能的IDE,能够完成python,java,c++,opencv,html等开发 接下来就开始我们的搭建,搭建借鉴 https://blog.csdn.net/zhaiax672/article/details/88971248 (里面包括MinGW64,opencv,cmake的下载及配置链接), 建议看完这个博客后不要直接安装,请往下接着看,这样让你少踩一些坑 当然安装过程不会是一帆风顺的,我按着上面的博客一步一步的搭建,在输入 minGW32-make 命令后,编译过程失败,大概都会卡在 27% ,错误信息如下: 3rdparty\protobuf\CMakeFiles\libprotobuf.dir\build.make:412: recipe for target '3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/stubs/io_win32.cc.obj' failed mingw32-make[2]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/stubs

protobuf生成java代码

[亡魂溺海] 提交于 2020-01-15 04:28:08
protobuf官方包下载: https://github.com/protocolbuffers/protobuf/releases/tag/v3.11.1 1、Idea中安装protobuf插件,重启Idea 2、idea中新建maven项目protobuf-demo 3、pom.xml中添加如下依赖 <properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId> com.google.protobuf </groupId> <artifactId> protobuf-java </artifactId> <version> 3.6.1 </version> </dependency> <dependency> <groupId> junit </groupId> <artifactId> junit </artifactId> <version> 4.13 </version> <scope> test </scope> </dependency> </dependencies> <build> <extensions> <extension> <groupId> kr

protobuf安装和简单使用

自作多情 提交于 2020-01-14 22:08:08
安装 在网站 http://code.google.com/p/protobuf/downloads/list 上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。 安装步骤如下所示: ##yum组,找到Development tools yum grouplist ##查看Development tools yum groupinfo Development tools ##安装组,组内所有依赖将被安装 yum groupinstall Development tools -y ##解压protobuf压缩包 tar -xzf protobuf-2.5.0.tar.gz ##进入protobuf解压文件中 cd protobuf-2.5.0 ##对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系 ./configure ##编译并安装 make && make install ##查看安装目录 whereis protoc 编写一个proto 文件,后缀名必须为 .proto,放在 /root 目录下 package com.hbase.test; message callLogs { required string duiFangPhoneNum=1;//对方手机号 required string ctime=2;//通话时间

Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

独自空忆成欢 提交于 2020-01-11 05:02:53
一  protobuf-net优化效果图   protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的源代码不支持Unity3D游戏在各个平台上的动态库构建。它是一个网络传输层协议,对应的lua版本有两个可用的库:一个是proto-gen-lua,由tolua作者开发,另外一个是protoc,由云风开发。protobuf-net在GC上有很大的问题,在一个高频率网络通讯的状态同步游戏中使用发现GC过高,所以对它进行了一次比较彻底的GC优化。下面是优化前后的对比图: protobuf-net优化前GC和性能效果图 protobuf-net优化后GC和性能效果图 二  Unity3D游戏GC优化概述   有关Unity3D垃圾回收的基本概念和优化策略Unity官网有发布过文章: Optimizing garbage collection in Unity games 。这篇文章讲述了Unity3D垃圾回收机制,和一些简单的优化策略,讨论的不是特别深入,但是广度基本上算是够了。我罗列一下这篇文章的一些要点,如果你对其中的一些点不太熟悉,建议仔细阅读下这篇文章:   1、C#变量分为两种类型:值类型和引用类型,值类型分配在栈区,引用类型分配在堆区,GC关注引用类型   2

多激光雷达与摄像头的融合算法(一)

喜你入骨 提交于 2020-01-07 16:37:35
2020年得第一篇博客,真是好长时间没发博客,这半年里毕业到一家v2x公司之后比较忙,不发博客内心是比较着急,总觉得没记录点啥。年底了,写点东西吧,不然csdn恐怕要取消我博客专家的评级了。 接下俩我分两章介绍一下文章,小编手里有两个传感器,6个激光雷达与摄像头,还有一个微波摄像头,分别装在一个路口的不同地方,需要将这些传感器进行融合输出目标列表。如图: 安装如图: 第一篇讲解如何进行通信,后面第二章讲解具体算法实现。 先摆一下最终结果吧: 激光雷达可以获取目标前方的环境信息,返回前方障碍物的距离数据,并且距离信息的精度非常高,误差可以达到厘米级别,但由于得到的是目标的几何轮廓信息,很难分辨得到运动目标与目标运动的速度(在本项目中激光雷达虽然给出目标ID与速度,但置信度是不高的)。微波雷达可以给出前方运动目标的速度,角度信息都比较准确,但距离信息不准确。摄像头在感知系统里使用频率最高,单一摄像头可完成车辆行人等二维信息获取及其细分类问题,从而弥补激光雷达的缺陷。因此本项目的主要思路是完成互补信息的投影融合。得到融合后的目标数据之后,边缘计算设备按照内部协议发送至网络中。 软件架构如下: 1、protobuf介绍 Protobuf产生于Google,是一种序列化和反序列化协议,具有空间开销小、解析速度快、兼容性好等优点,非常适合于对性能要求高的RPC(Remote Procedure

netty

梦想的初衷 提交于 2020-01-06 17:52:16
1.BIO、NIO 和 AIO 的区别? BIO: 一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步 IO: 将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO: 一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。 AIO: 一个有效请求一个线程,客户端的 I/O 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理。 BIO 是面向流的,NIO 是面向缓冲区的;BIO 的各种流是阻塞的。而 NIO 是非阻塞的;BIO的 Stream 是单向的,而 NIO 的 channel 是双向的。 NIO 的特点: 事件驱动模型、单线程处理多任务、非阻塞 I/O,I/O 读写不再阻塞,而是返回 0、基于 block 的传输比基于流的传输更高效、更高级的 IO 函数 zero-copy、IO 多路复用大大提高了 Java 网络应用的可伸缩性和实用性。基于 Reactor 线程模型。 在 Reactor 模式中,事件分发器等待某个事件或者可应用或个操作的状态发生,事件分发器就把这个事件传给事先注册的事件处理函数或者回调函数,由后者来做实际的读写操作。如在 Reactor 中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事件、事件到来,激活分发器