这个模块含有一个工具箱,包括线程管理,数据结构,网络,和文本解析工具。Darwin流媒体服务器及其相关工具通过这些类对类似或者相同的任务进行抽象,以减少重复代码;这些类的封装简化了较高层次的代码;借助这些类还分离了专用于不同平台的代码。下面是对目录下的各个类的简短描述:
- OS类。这些类在时间,条件变量,互斥锁,和线程方面提供了专用于不同平台的代码抽象。这些类包括OS,OSCond,OSMutex,OSThread,和OSFileSource;数据结构则包括OSQueue,OSHashTable,OSHeap,和OSRef。
- 套接口类(Sockets)。这些类为TCP和UDP网络通讯方面提供了专用于不同平台的代码抽象。通常情况下,套接口类是异步的(或者说是非阻塞的),可以发送事件给Task对象。这些类有:EventContext,Socket,UDPSocket,UDPDemuxer,UDPSocketPool,TCPSocket,和TCPListenerSocket。
- 解析工具。这些类负责解析和格式化文本。包括StringParser,StringFormatter,StrPtrLen,和StringTranslator。
- Task(任务):这些类实现了服务器的异步事件机制。
各个模块功能
OS:封装时间接口
OSBufferPool:缓存池,通过队列实现
OSCodeFragment:加载动态库
OSCond:事件对象
OSFileSource:文件操作,加入了缓存功能
OSHeap:堆,用数组实现
OSMapEx:EasyDarwin实现,工程未使用
OSMutex:关键代码段
OSMutexRW:读写锁,通过OSMutex和OSCond实现
OSQueue:队列
OSQueueIter:队列指针,可用来遍历
OSQueue_Blocking:队列同步处理
OSHashTable:哈希表
OSThread:线程类,其中线程数据使用TLS来实现。线程局部存储(Thread Local Storage,TLS)用来将数据与一个正在执行的指定线程关联起来。子类实现Entry,为线程的运行代码。
TaskThreadPool:全局线程池
TaskThread:任务线程
Task:任务,执行Signal时,会从TaskThreadPool中取TaskThread来运行
EventContext:事件上下文,主要是关联EventThread,请求网络事件,只有子类Socket
Socket:套接字,实现了套接字的功能,并关联全局唯一EventThread线程(专门处理网络事件)
TCPSocket:TCP套接字,继承Socket,主要实现以TCP方式打开套接字
TCPListenerSocket:TCP服务类,继承TCPSocket和IdleTask。通过GetSessionTask来关联套接字处理任务
QTSSStream:流,只定义了基础的读写相关操作
QTSSDictionary : 继承QTSSStream,作为数据字典提供保存变量,获取变量,修改,删除变量。通过复杂的嵌套来实现。