之前通信协议替换为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. Redis为什么是单线程的

    一.前言   最近在学习Redis,这篇文章就来简单聊聊一道常考的面试题--Redis为什么是单线程的.废话不多说,直接开始吧. 二.正文 2.1 为什么需要多线程   首先,现在的CPU一般都是由多 ...

  2. CentOS启用iptables防火墙

    centos 7默认的防火墙使用firewall,系统服务管理方式也变更了,可以通过systemctl命令控制. 可以参考这个链接 但是习惯用iptables,可以按下面的操作改下 1.关闭firew ...

  3. E. Reachability from the Capital dfs暴力

    E. Reachability from the Capital 这个题目就是给你一个有向图,给你起点,问增加多少条边让这个图变成一个连通图. 这个因为n只有5000m只有5000 所以可以暴力枚举这 ...

  4. 选择结构(if、switch)

    3.2  用if语句实现选择结构 什么是选择结构 单分支if语句 双分支if语句 多分支if语句 1.什么是选择结构? 选择结构又称为分支结构,是根据给定的条件是否成立来决定程序的执行流程. 用if语 ...

  5. vue-cli3.0读取外部化配置文件来修改公共路径

    之前我写过一篇通过nginx配置代理转发的博客,正常来说也是正确的,但不足之处在了甲方还用了F5负载均衡和gateway来代理转发.所以之前我认为的请求->nginx转发代理->后端服务, ...

  6. Linux内核驱动学习(二)添加自定义菜单到内核源码menuconfig

    文章目录 目标 drivers/Kconfig demo下的Kconfig 和 Makefile Kconfig Makefile demo_gpio.c 目标 Kernel:Linux 4.4 我编 ...

  7. k近邻法(一)

    简介 k近邻法(k-nearest neighbors algorigthm) 是一种最基本的用于分类和回归的方法之一,当没有关于训练数据的分布时,首先最容易想到的就是采用k近邻法. k近邻法输入为实 ...

  8. R语言:计算现金工资的币数

    新入职的员工,有的没有相应银行卡,需要计算现金工资的币数.实发工资,一般取整数. 简化计算,纸币面值只有100.10.1.4278除以100等于42余78,78除以10等于7余8,8除以1等于8. 复 ...

  9. .NETcore中使用jwt来对api进行身份验证

    对于 登陆,身份,授权这之类的操作,我们最常用的几种方法无非就是 cookie session token 这三者的差别 https://www.cnblogs.com/moyand/p/904797 ...

  10. Java UDP小结

    UDP: * 发送端                                                                                           ...