精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。
UDT的目的是加快通信效率,它的历史背景和组成这里就不多说了。通过UDT学习,掌握处理通信数据的方法,掌握通信协议的设计,掌握通信处理的线程架构方式,会极大提升程序员架构能力。另外UDT的代码量也比较大,通过阅读也能提升阅读能力。
因为UDT的科研价值高,这里不便列出部分视频,只列举了视频的几个部分截取为gif
int CEPoll::wait(const int eid, set<UDTSOCKET>* readfds, set<UDTSOCKET>* writefds, int64_t msTimeOut, set<SYSSOCKET>* lrfds, set<SYSSOCKET>* lwfds)
这函数里Win模式下代码的核心是:select。select函数的目的是监听SOCKET事件。我们都知道,SOCKET的函数,比如read,在以阻塞模式运行时,如果无数据可读,则会阻塞一段时间,到达超时时间或有数据时才返回,阻塞会影响线程运行,会导致线程功能失效。所以先判断有没有事件,再进行动作,这是基本的开发要求。
80 00 00 00 握手协议控制包 4次
4*72
74 ea e9 d4数据包 c0 00 00 01 c转化为1100,“11”表示消息仅含有唯一的包;该包里包含了文件名
CRcvLossList* m_pRcvLossList; // Receiver loss list
在UDT里添加信息,删除信息,获取辅助信息指导控制。
它本身的数据结构算法通过find函数,可以粗浅理解为类似FAT表里文件占用扇区这样,有向下链表和向上链表。
接收端丢失链表(Receiver’s Loss List):是包含“二元组和一个参数”的链表。
二元组包括:检测到的丢失数据包的序列号,最新丢包的反馈时间;一个参数k
是每一个丢失包被NAK反馈的次数。节点元素按照包序列号的升序进行排序。
添加是从processData里完成,有丢失就添加。
删除是从processCtrl里完成,通过控制包的处理来删除丢失数据。