protobuf数据类型

Netty题目总结

蓝咒 提交于 2020-03-17 08:59:05
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 中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事 件、事件到来

【Google Protocol Buffer】Google Protocol Buffer

China☆狼群 提交于 2020-03-09 08:29:06
http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。 17 评论: 刘 明 , 软件工程师, 上海交大电子与通信系 2010 年 11 月 18 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用。 开始您的试用 简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议

Netty protobuf 整合 -- 使protobuf可同时处理多种类型

浪尽此生 提交于 2020-03-02 07:42:08
简要介绍 在带宽固定的情境下,压缩消息大小可以提升网络传输效率。另外,如果消息需要经过多个组件,那么收益更为可观。 消息序列化一般不会采用jdk自带的Serializable,更多的会采用thrift或者protobuf来做编解码。 thrift protobuf Netty 整合protobuf困境 在做序列化的时候,往往遇上一种困境,在pipeline添加编解码的时候,只能添加一种数据类型编解码。 如下所示 pipeline.addLast(new ProtobufDecoder(LoginAsk.getDefaultInstance)); pipeline.addLast(new ProtobufEncoder()); 上述的代码只能接收LoginAsk,无法处理其他类型的请求。 有一种较为直接的方式,开启多个端口,每一个端口处理特定的业务,不同消息之间用netty代理转发。当业务需要经常和其他类型交互时,由于多了多次转发,代码会变得复杂而不可控。 解决思路 ProtobufDecoder只接受一种实例化方式,传递特定的class,所以只能从这个类型突破。很容易想到,将这个类作为转发器,即,能通过这个类的特定字段定位到特定的class,并且包含body(结合class反序列化成instance)。 由此可得,消息协议可以被设计成head,body,tail三部分

Netty高级

℡╲_俬逩灬. 提交于 2020-02-06 01:45:35
Netty 快速 入门 什么 是 N etty Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。 N etty 应用场景 1. 分布式 开源框架中 dubbo、Zookeeper , RocketMQ 底层 rpc 通讯 使用 就是 netty 。 2. 游戏 开发 中 ,底层 使用netty通讯 。 为什么 选择 netty 在本小节,我们总结下为什么不建议开发者直接使用 JDK 的 NIO 类库进行开发的原因: 1) NIO 的类库和 API 繁杂,使用麻烦,你需要熟练掌握 Selector 、 ServerSocketChannel 、 SocketChannel 、 ByteBuffer 等; 2) 需要具备其它的额外技能做铺垫,例如熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的 NIO 程序; 3) 可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处 n 理等等, NIO 编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大; 4) JDK NIO 的 BUG ,例如臭名昭著的 epoll bug ,它会导致 Selector

序列化和反序列化

我怕爱的太早我们不能终老 提交于 2020-02-06 00:25:59
1, 摘要   序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展。本文从多个角度去分析和讲解“序列化和反序列化”,并对比了当前流行的几种序列化协议,期望对读者做序列化选型有所帮助。   简介   文章作者服务于美团推荐与个性化组,该组致力于为美团用户提供每天billion级别的高质量个性化推荐以及排序服务。从Terabyte级别的用户行为数据,到Gigabyte级别的Deal/Poi数据;从对实时性要求毫秒以内的用户实时地理位置数据,到定期后台job数据,推荐与重排序系统需要多种类型的数据服务。推荐与重排序系统客户包括各种内部服务、美团客户端、美团网站。为了提供高质量的数据服务,为了实现与上下游各系统进行良好的对接,序列化和反序列化的选型往往是我们做系统设计的一个重要考虑因素。   本文内容按如下方式组织: 第一部分给出了序列化和反序列化的定义,以及其在通讯协议中所处的位置。 第二部分从使用者的角度探讨了序列化协议的一些特性。

初识protobuf和php的相关用法

耗尽温柔 提交于 2020-01-31 07:56:50
前言      大家好,这是我在博客园的第一篇博文,很早之前就想尝试开通技术博客了,但是由于各种原因计划一直都没有实施。开通博客只是想简单的记录下自己生活工作相关的一些事情,之前一直在用evernote记录,无法用更多的人分享一些信息和交流,所以打算开通博客,将之前evernote上记录的一些经历分享出来和大家一起探讨学习,初步定于每星期更新一篇博文,以后有时间可以能会增加更新的频率,因为不经常写,所以文采可以忽略,有错误的地方还望大家及时指正。废话不多说,下面开始我的第一篇博文 正文    本文主要介绍下php结合protobuf的一些相关用法,首先php相信大家都比较了解,它是一门主要用于web开发的解释型高级面向对象的计算机编程语言,其全称是超文本预处理器(Hypertext Preprocessor),现在的最新稳定版本是7.1。下面重点介绍下protobuf,protobuf是谷歌开源的一种用于数据交换的开源协议,其主要的特点是跨平台、跨语言、可扩展,它是一种用于序列化结构数据的开源协议。目前业界在扩平台、跨语言的领域数据交换用的最多的是使用json,但是相较于json,protobuf主要的特点表现为可扩展性强、安全性好、速度更快,下面我们就详细看下php是怎么结合protobuf序列化结构数据的   1、首先需要在开发机上面安装protobuf

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 中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事件、事件到来,激活分发器

google protobuf 中的proto文件编写规则

喜你入骨 提交于 2020-01-02 05:34:54
1. 简单介绍 protobuf文件:就是定义你要的消息(类似 Java 中的类)和消息中的各个字段及其数据类型(类似java类中的成员变量和他的数据类型) 2. Protobuf消息定义 消息由至少一个字段组合而成,类似于 C语言 中的结构。每个字段都有一定的格式。 字段格式:限定修饰符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤] 1)限定修饰符包含 required\optional\repeated Required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。 Optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。---因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。 Repeated:表示该字段可以包含[0

Protobuf 了解一下

自古美人都是妖i 提交于 2019-12-30 16:24:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java开发成长手册, GitHub JavaEgg ,N线互联网开发必备技能兵器谱,欢迎star + 指导 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准 ,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化(将 数据结构或对象 转换成 二进制串 的过程 )。它很适合做 数据存储 或 RPC 数据交换 格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式 protocol buffers 诞生之初是为了解决服务器端新旧协议(高低版本)兼容性问题,名字也很体贴,“协议缓冲区”。只不过后期慢慢发展成用于传输数据。 笔者所在的360广告投放,N亿条商品信息的数据全部采用PB格式存储、传输。 Protobuf 的优点 更小——序列化后,数据大小可缩小约3倍 更快——序列化速度更快,比xml和JSON快20-100倍,体积缩小后,传输时,带宽也会优化 更简单——proto编译器,自动进行序列化和反序列化 维护成本低——跨平台、跨语言,多平台仅需要维护一套对象协议(.proto) 可扩展——“向后”兼容性好,不必破坏已部署的、依靠“老”数据格式的程序就可以对数据结构进行升级 加密性好—

Protobuf简介

爷,独闯天下 提交于 2019-12-27 09:21:57
简明扼要的说,protobuf是一种对结构化数据的序列化格式(形如JSON、XML),用于在数据通信、数据存储之中。protobuf是由Google设计开发,与开发平台及开发语言均无关。其特点在于灵活高效,序列化后的数据简单、轻便,序列化/反序列化过程耗时更短。 在使用Protobuf时,需要将待序列化的结构类型在“.proto“文件中进行标注声明。一个protocol buffer消息,包含有若干个key-value对。在一个消息内,每一个字段都包含有它的名字和它的数据类型。数据类型可以是数字、布尔型、字符串、比特串,甚至是其他的protocol buffer消息类型。对声明的消息字段,可以特别的声明该字段是可选字段(optional)还是必填字段(required)还是可重复字段(repeated)。以下是一个.proto文件的样例: message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [