Linux服务器开发,应用层协议设计ProtoBuf/Thrift

屯门山鸡叫我小鸡 原创小能手 2022-03-03 16:16:37

────────────────────────────────────────────────────────────────
┌————————————┐
│▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦。
└————————————┘
对你的感情正在充电中,请稍侯…
────────────────────────────────────────────────────────────────

推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

────────────────────────────────────────────────────────────────

应用层协议设计ProtoBuf/Thrift

  • 前言
  • 一、为什么需要协议设计
  • 二、消息帧的完整性判断
  • 三、协议设计范例
  • 四、jason/xml/protobuf不同序列化对比
  • 五、protobuf工程实践和原理
  • 总结

前言

协议对于前后端通讯是非常重要的,作为开发新手往往不能理解和掌握协议的设计,导致增加了很多不必要的工作。

一、为什么需要协议设计

让发送端和接收端的通道能理解之间发送的数据。

二、消息帧的完整性判断

四种判断消息的完整性

  • 固定长度
  • 特别标记/r/n
  • 固定消息头+消息体结构
  • 序列化后的buffer前面增加一个字符流的头部,其中有一个字段村村消息总长度。

三、协议设计范例

在这里插入图片描述

四、jason/xml/protobuf不同序列化对比

  • xm本地配置,ui配置qt,Androidl
  • json,websocket http协议,注册账号,web里面登录
  • protobuf,业务内部使用,各个服务之间rpc调用,即时通讯项目,游戏项目,带宽占用少的。

IDL(Interface description language)接口描述语言:将文件通过工具生成.c文件。
完整的protobuf库支持C++反射。

项目.模块.proto

在这里插入图片描述

五、protobuf工程实践和原理

base128 Bariants 表示值 : 每个字节的最高位不能直接用来表示我们的value,它是用来判断自己是否结束。0代表解释,1表示没有结束。小端形式base128。
Zigzag:针对负数进行优化,内部将int32类型负数转化为uint64来处理。都是整数用int32,有负数用sint32。

总结

Darren老师建议把person对象进行手写一下,最起码要把protobuf文件进行修改,我觉得也是非常有必要的。从目前自己对知识掌握的程度上来看,二次学习是必须的,既然已经花了大力气就应该把知识完全掌握,那就既来之则安之吧!

...全文
140 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-运维 发布问题, 以便更快地解决您的疑问

534

社区成员

发帖
与我相关
我的任务
社区描述
零声学院,目前拥有上千名C/C++开发者,我们致力将我们的学员组织起来,打造一个开发者学习交流技术的社区圈子。
nginx中间件后端 企业社区
社区管理员
  • Linux技术狂
  • Yttsam
  • 零声教育-晚晚
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

请新加入的VIP学员,先将自己参加活动的【所有文章】,同步至社区:

【内容管理】-【同步至社区-【零声开发者社区】

试试用AI创作助手写篇文章吧