应用层设计和protobuf的使用

一、协议

1、协议的概念

        应用层协议(Application Layer Protocol)是网络通信协议中的一部分,它定义了运行在不同端系统(如计算机、服务器等)上的应用程序进程如何相互传递报文(或称为消息)。这些协议是网络通信的高层协议,位于OSI(开放系统互连)参考模型的最上层,即应用层,或者是TCP/IP模型的应用层。

2、判断消息的完整性-区分消息的边界

        2.1:固定大小的字节,比如每一百个字节就作为一次完整的信息进行接收。

        2.2:以特定的符号进行分隔,比如每个消息的后面用"\r\n",当字节流读取到该字符的时候,表明这条消息的结束。

        2.3:固定消息头加消息体结构:这种结构中一般是消息头部分和一个固定长的结构,并且消息头中会有一个特定的字段指定消息体的大小。收消息时,先接受固定字数的头部,解析出这个消息完整的长度,按照此长度接受消息体。这是目前各种网络应用用的最多的一种消息格式。

        2.4:在序列化后的buffer前面郑家一个字符流的头部,其中有个字段保存消息的总长度,根据特殊字符(比如根据\n或者 \n)判断头部的完整ing,这样通常比3要麻烦一些,HTTP和REDIS采用的就是这种方式。收消息的时候,先判断已经收到的数据中是否包含结束符,当收到结束符后解析消息头,接触这个消息完整的长度后,按着此长度进行接收消息体。

3、协议设计

        3.1:消息边界,消息的起始位置和结束位置。

        3.2:版本区分,版本号放在哪里。

        3.3:消息类型的区分,即时通讯:login,msg。

        3.4:消息body序列化协议的选择,xml,json,protobuf。

二、序列化

1、序列化的方法

        1.1:TLV编码及其变体(TLV是tag,length和value的缩写:)如protobuf。

        1.2:文本流编码:比如XML/JSON。

        1.3:固定结构编码:基本原理是,协议约定了传输字段类型和字段含义,和TLV的方式类似,但是没有了tag和len,只有value,比如TCP/IP。

        1.4:内存dump:基本原理是,把内存中的数据直接输出,不做任何序列化操作,反序列化的时候,直接还原内存。

        常见的序列化方法:主流序列化协议:xml,json,protobuf。

        1:XML指可扩展标记语言,是一种通用和重量级的数据交换格式,以文本方式存储。

        2:JSON是一种通用和轻量级的数据交换格式,以文本结构进行存储。

        3:protocol buffer是Google的一种独立和轻量级的数据交换格式。以二进制结构进行存储。

2、protobuf的重要知识

        2.1:边长编码和固定长度编码的区别。

        2.2:变长编码用什么方式区分变量边界,比如base128.

        2.3:base128使用每个字节的最高效位作为标志位,而剩余的7位以二进制补码的形式来存储数字值本身,当最高有效位为1时,代表其后还有字节,当最高有效位为0时,代表已经是该数字的最后一个字节。

        2.4:可变成变量和固定长度有什么优缺点。

https://xxetb.xetslk.com/s/2D96kH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值