Skip to content

Latest commit

 

History

History
56 lines (28 loc) · 2.34 KB

【NO.540】Linux服务器开发,应用层协议设计ProtoBufThrift.md

File metadata and controls

56 lines (28 loc) · 2.34 KB

【NO.540】Linux服务器开发,应用层协议设计ProtoBuf/Thrift

0.前言

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

1.为什么需要协议设计

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

2.消息帧的完整性判断

四种判断消息的完整性

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

3.协议设计范例

在这里插入图片描述

4.jason/xml/protobuf不同序列化对比

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

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

项目.模块.proto

在这里插入图片描述

5.protobuf工程实践和原理

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

6.总结

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

原文作者:屯门山鸡叫我小鸡

原文链接:https://bbs.csdn.net/topics/605060882