live555是采用单进程,单线程的服务器,能够同时支持多个客户端连接,并且有条不紊的进行媒体流的调度,很大一部分原因在于对数据结构的巧妙应用。
下面介绍live555核心的数据结构:闭环双向链表
什么是闭环双向链表?
描述:
一个节点保存有前一个节点的地址和后一个节点的地址,并且最后一个节点的下一个节点地址指向第一个节点,第一个节点的前一个节点的地址指向最后一个节点;
该链表的添加方式为头插法;
该链表有三个类进行管理(HandlerSet.hh文件)
节点的描述类(HandlerDescriptor)
class HandlerDescriptor {
HandlerDescriptor(HandlerDescriptor* nextHandler);
virtual ~HandlerDescriptor();
public:
int socketNum;//套接字文件描述符
int conditionSet;//要响应的状态(可读,可写,异常),回调函数执行的条件
TaskScheduler::BackgroundHandlerProc* handlerProc;//执行函数
void* clientData;//执行函数的参数
private:
// Descriptors are linked together in a doubly-linked list:
friend class HandlerSet;
friend class H