之前通信协议替换为protocbuf!新老交替,很多不同看法,也提出来一些负面因数:

  1、老的内部通信协议体已经有一段时间了,稳定熟悉!

  2、通过通信结构体进行交互,实际上并没有序列化和反序列化的过程!性能几乎零损耗

  3、通信异常直接可以通过日志打印出来,定位问题时候可以直接查看关键信息

  4、由于老代码用的是内部封装的通信结构体,几乎所有的老代码都直接或间接的引用了老通信协议体,替换工作量比较大

  也存在另外一种正面意见:

  1、老代码陈旧冗余,新增接口或修改接口让人头疼

  2、需要业务层考虑字节序问题

  3、由于是内存偏移操作,程序员风格的差异让整个协议文件变的很乱!更致命的是一旦发生错误定位起来非常困难

  4、另外还有一些内部通信体限制问题

  无论替换过程怎样,项目的车轮还在前进!protocbuf已经在产品中落地生根,一小段周期的接触,总结下:

  protocbuf是google的一个开源项目,很多互联网公司早就在用了,像百度、腾讯这些巨头,而且在github里面的关注度也是一直颇高。

  它也有很多的优势,从我的角度看最明显的是序列化速度快,而且序列化之后字节非常少。

  就我之前所接触的几种序列化,JSON、SAMP、ASN.1性能都不如protocbuf,ASN.1和protocbuf组织有点像,都是树状结构!

  但是ASN.1协议体除了TAG还需要一些辅助信息,对数据的编码也缺少压缩,像DCC、SOAP等网络协议性能更低。

  另外protocbuf还有缓存机制、结构体式接口、兼容性等等一系列的优点

  虽然protocbuf有着明显性能和压缩的优势,虽然这种网络通信里面至关重要,但是我们更关注其缺点:

  1、protocbuf只提供序列化和反序列化的能力,如果用在网络通信里面,需要再封装。

  2、protocbuf序列化之后可读性差,对抓包后面的码流分析起来非常困难,毕竟有时候工具不是万能的,手工是终极绝招

  3、protocbuf描述性文档比较少,目前也没有普遍推广

  另外是开发过程中的一些问题

  4、protocbuf repeated类型,如果想替换已经加入的一个子元素,那几乎要重写所有的元素

  5、protocbuf在没有数据传输的时候,序列化出来的长度是0.虽然这种做法提高了序列化性能和压缩了数据,但是在空数据的情况下,占位符对程序设计影响颇大

  6、protocbuf版本在hp主机上要修改之后才能用

  暂时就这么多吧,我也不知道还要多少坑等着我们,路过的兄弟请提点!

protocbuf的简单理解的更多相关文章

  1. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  2. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  3. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  4. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  5. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  6. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  7. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  8. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

  9. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

随机推荐

  1. C++编程入门题目--No.2

    题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%:20万到4 ...

  2. The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)

    This is an era of team success, but also an era of heroes. Throughout the ages, there have been nume ...

  3. MySQL导出数据到文件中的方法

    MySQL导出数据到文件中的方法 1.导出数据到txt文件中实例:把数据表studscoreinfo中所有数据导出到指定的位置方法:select * from 表名 into outfile 指定导出 ...

  4. 使用Redis构建电商网站

    涉及到的key: 1. login,hash结构,存储用户token与用户ID之间的映射. 2. recent_tokens,存储最近登陆用户token,zset结构 member: token,sc ...

  5. spring源码阅读笔记10:bean生命周期

    前面的文章主要集中在分析Spring IOC容器部分的原理,这部分的核心逻辑是和bean创建及管理相关,对于单例bean的管理,从创建好到缓存起来再到销毁,其是有一个完整的生命周期,并且Spring也 ...

  6. 初识Matlab及界面认识

    通过本章节的学习,需要掌握: MATLAB语言是什么 MATLAB在互联网语言中地位与应用 目标:利用MATLAB进行问题求解的基本规律.够使用MATLAB作为专业应用的工具. 1.什么叫计算? (1 ...

  7. java基础篇 之 位运算符

    按位操作符 ​ 按位操作符用来操作基本数据类型中的单个"比特"(bit),即二进制位.按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果. ​ 我们常用的按位操作 ...

  8. 物流配送管理系统(ssm,mysql)

    项目演示视频观看地址:https://www.toutiao.com/i6811872614676431371/ 下载地址: 51document.cn 可以实现数据的图形展示.报表展示.报表的导出. ...

  9. pyhanlp安装成功,import导入失败,出现:importerror: cannot import name 'jvmnotfoundexception'

    1.问题描述: pyhanlp成功安装,并且可以正常使用,但是这段时间再去用的时候,发现出问题了,一运行就出现,下面的问题: importerror: cannot import name 'jvmn ...

  10. 初探Redis-基础类型Hash

    Redis存在五种基础类型:字符串(String).队列(List).哈希(Hash).集合(Set).有序集合(Sorted Set).本次列举出Hash的常用操作. Redis官网:https:/ ...