【摘要】 一种基于非阻塞机制的HTTP报文处理方法,包括以下步骤:A)当读事件触发,读取HTTP报文,将其存放于数据缓冲中;B)判断该报文是否需要解析报文头,是则转C),否则转D);C)判断报文头是否已经完整到达,是则解析报文头,否则转A);D)判断报文体是否已经完整到达,是则解析报文体,否则转A);E)解析完毕,将数据缓冲回收至数据缓冲池。本发明糅合了多线程和事件驱动两者的优点,在HTTP报文的处理过程中,实现了真正的非阻塞机制,使得HTTP报文在解析过程中达到零拷贝和一次遍历,大大的提高了HTTP报文的处理效率。 : 【专利类型】发明授权 【申请人】北京航空航天大学 【申请人类型】学校 【申请人地址】100083 北京市海淀区学院路37号 【申请人地区】中国 【申请人城市】北京市 【申请人区县】海淀区 【申请号】CN200810101243.9 【申请日】2008-03-03 【申请年份】2008 【公开公告号】CN101282300B 【公开公告日】2010-12-08 【公开公告年份】2010 【授权公告号】CN101282300B 【授权公告日】2010-12-08 【授权公告年份】2010.0 【IPC分类号】H04L12/56; H04L29/08; H04L12/833; H04L47/31 【发明人】韩军; 张德才; 李竹青; 马殿富; 刘建; 霍远国 【主权项内容】一种基于非阻塞机制的HTTP报文处理方法,其特征在于:前提是建立起基于非阻塞机制的HTTP服务器的线程模型,该服务器的线程模型包括四个组件,select线程,负责侦听各种非阻塞IO事件的发生并负责和客户端建立连接;线程池,它由多个工作线程组成,每个工作线程包含有一个事件队列,每一个事件队列存放多种类型的事件即任务;连接——线程映射表,其key值为连接,其value值为线程,根据该映射表,使得一个连接的所有任务在一个线程中执行;数据缓冲池,是存放报文的数据结构,它由两个数据缓冲链组成,其一为busy链,表示正在使用的数据缓冲的集合,其二为free链,表示已经存在但当时未被使用的数据缓冲集合,因此,数据缓冲池由多个数据缓冲组成,每一个数据缓冲在某一个时刻只保存一个连接的报文,当读取分配数据缓冲的过程报文处理完毕,该缓冲池回收相应的数据缓冲,避免了下次再分配和销毁的开销;在此线程模型基础上,一个数据报文的处理过程包括以下步骤:(1)当读事件触发时,select线程获取读事件,由工作线程完成HTTP报文的读取,并保存至数据缓冲中;(2)判断该HTTP报文是否需要解析报文头,是则转步骤(3),否则转步骤(4);(3)判断该HTTP报文头是否已经完整到达,是则解析报文头,否则转步骤(1);(4)判断该HTTP报文体是否已经完整到达,是则解析报文体,否则转步骤(1);(5)解析完毕,将数据缓冲回收至数据缓冲池。 【当前权利人】北京航空航天大学 【当前专利权人地址】北京市海淀区学院路37号 【统一社会信用代码】12100000400011227Y 【引证次数】3.0 【他引次数】3.0 【家族引证次数】3.0 【家族被引证次数】14