一、数据发送过程中存在的问题
发送中无法取消文件发送
大文件传输容错率较低
同一连接无法实现文件、普通消息优先级
二、分片数据传输流程
三、分片逻辑实现
根据文件大小计算分片、并读取数据到分片
分片数据固定格式打包发送
分片数据解析与分片组装
Dispatcher调度逻辑调整
四、Packet规则
五、分片消息规则
帧大小 : 最大为2的16次方-1=65535(0占用一个字节,所以最大标识为65535),即帧的大小最大为65535
帧类型 :表明帧是否是首帧(如果为首帧,则根据类型创建对应的帧类型。如果不是,则直接添加数据)、取消帧等
帧标志信息:用于存储加密的信息,如加密的类型
对应包唯一标示 :正数,范围为1~255(0一般不使用),比如头帧packet携带的是1,数据帧也是1,那么第二个packet来的时候携带的标示为2,数据帧也为2。当接收到标示为2时,则向相同的packet塞数据。此时,可以实现并发255个的消息传输。
预留空间 : 对于可能性的扩展
数据区 :帧载体
六、Packet新规则
packet包含包头和包体,包头为首帧,首帧为如图所示的数据结构。
包头的内容会添加到帧的数据区中,告诉packet的包体是多长,类型是什么,包体的packetinfo是什么。
包体包含很多帧。
七、帧Frame数据结构
八、首帧数据内容
上半部分是每一帧的头部部分
从Data Length开始,都属于数据部分。
数据部分,首先使用5个字节存储数据的长度,1个字节存储数据的类型,256个字节存储headerinfo
九、基础的类
Frame :分片的类
AbsSendFrame : 基础发送帧
AbsSendPacetFrame : 基础发送Packet帧
SendHeaderFrame : 发送头帧
SendEntityFrame :发送实体帧
AbsReceiveFrame : 基础接收帧
ReceiveHeaderFrame :接收头帧
ReceiveEntityFrame :接收实体帧
CancelSendFrame :取消发送的帧
AsyncPacketReader : 管理packet的接收,实现分片的逻辑
AsyncPacketWriter : 管理packet的接收,实现分片的逻辑
BytePriorityNode : 带优先级的结点,可用于构成链表
十、类图
十一、将Packet转为Frame的过程