protobuf数据类型

protobuf在websocket通讯中的使用

痞子三分冷 提交于 2019-12-11 07:35:08
教程目录 一 protobuf简介 二 使用protobuf 三 Demo下载 参考: CSDN:Egret项目中使用protobuf (protobufjs) TS项目中使用Protobuf的解决方案 (babel) 在cocos creator中使用protobufjs layabox:网络和格式--ProtocolBuffer egret protobuf (egret官方提供的工具,自动配置和生成) protobuf简介 百度百科:protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言, 独立 于平台。google 提供了多种语言的实现:java、 c# 、 c++ 、go 和 python ,每一种实现都包含了相应语言的 编译器 以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于 分布式应用 之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 参考: protocol buffer_百度百科 中重度游戏开发框架:EGER PRO开发教程 google_protobuf数据类型 使用protobuf 1 导入第三方库 我直接把protobuf第三方库放在了项目中.. 修改egretProperties

序列化和反序列化-刘丁

为君一笑 提交于 2019-12-09 13:08:08
#一、定义以及相关概念 互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的 协议 ,序列化和反序列化属于通讯 协议 的一部分。通讯 协议 往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:TCP/IP 协议 是一个四层 协议 ,而OSI模型却是七层 协议 模型。 在 OSI七层 协议 模型中 展现层 (Presentation Layer) 的主要功能是把 应用层 的 对象 转换成一段连续的 二进制串 ,或者反过来,把 二进制串 转换成 应用层 的 对象 --这两个功能就是序列化和反序列化。 一般而言, TCP/IP 协议 的 应用层 对应与 OSI七层 协议 模型的 应用层 ,展示层和会话层 ,所以序列化 协议 属于 TCP/IP 协议 应用层 的一部分。 本文对序列化 协议 的讲解主要基于 OSI七层 协议 模型 。 序列化: 将 数据结构 或 对象 转换成 二进制串 的过程 反序列化:将在序列化过程中所生成的 二进制串 转换成 数据结构 或者 对象 的过程 数据结构 、 对象 与 二进制串 不同的计算机语言中, 数据结构 , 对象 以及 二进制串 的表示方式并不相同。 数据结构 和 对象 :对于类似Java这种完全面向 对象 的语言,工程师所操作的一切都是 对象 (Object),来自于类的实例化。在Java语言中最接近 数据结构 的概念

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,

Netty相关

☆樱花仙子☆ 提交于 2019-11-26 17:09:42
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中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事件、事件到来,激活分发器,分发器调用事件对应的处理器、事件处理器完成实际的读操作,处理读到的数据,注册新的事件

gRPC快速入门(二)——Protobuf序列化原理解析

对着背影说爱祢 提交于 2019-11-26 00:53:44
gRPC快速入门(二)——Protobuf序列化原理解析 一、Protobuf序列化原理简介 1、序列化 序列化是将数据结构或对象转换成二进制字节流的过程。 Protobuf对于不同的字段类型采用不同的编码方式和数据存储方式对消息字段进行序列化,以确保得到高效紧凑的数据压缩。 Protobuf序列化过程如下: (1)判断每个字段是否有设置值,有值才进行编码。 (2)根据字段标识号与数据类型将字段值通过不同的编码方式进行编码。 (3)将编码后的数据块按照字段类型采用不同的数据存储方式封装成二进制数据流。 2、反序列化 反序列化是将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程。 Protobuf反序列化过程如下: (1)调用消息类的parseFrom(input)解析从输入流读入的二进制字节数据流。 (2)将解析出来的数据按照指定的格式读取到Java、C++、Phyton对应的结构类型中。 二、Protobuf编码方式 1、Varint编码 Varint编码是一种变长的编码方式,编码原理是用字节表示数字,值越小的数字,使用越少的字节数表示。因此,可以通过减少表示数字的字节数进行数据压缩。 对int32类型的数字,一般需要4个字节表示。如果采用Varint编码,对于很小的int32类型数字,则可以用1个字节来表示;虽然大的数字会需要5个字节来表示,但大多数情况下