网站文章在哪发布做seo,好域名推荐,学风建设网站版块,外国网站手机dns状态机
有的应用层协议头部包含数据包类型字段#xff0c;每种类型可以映射为逻辑单元的一种执行状态#xff0c;服务器可以根据它来编写相应的处理逻辑。
状态之间的转移是需要状态机内部驱动的。
STATE_MACHINE(){State cur_State type_A;while(cur_State ! type_C){Pa…状态机
有的应用层协议头部包含数据包类型字段每种类型可以映射为逻辑单元的一种执行状态服务器可以根据它来编写相应的处理逻辑。
状态之间的转移是需要状态机内部驱动的。
STATE_MACHINE(){State cur_State type_A;while(cur_State ! type_C){Package _pack getNewPackage();switch(cur_State){case type_A:process_package_state_A(_pack);cur_State type_B;break;case type_B:process_package_state_B(_pack);cur_State type_C;break;}}
}HTTP 请求的读取和分析
TCP / IP 协议都在其头部中提供头部长度字段。程序根据该字段的值就可以知道是否接收到一个完整的协议头部。但 HTTP 协议并未提供这样的头部长度字段。根据协议规定我们判断 HTTP 头部结束的依据是遇到一个空行该空行仅包含一对回车换行符CRLF。
如果一次读操作没有读入 HTTP 请求的整个头部那么必须等待用户继续写数据并再次读入。因此我们每完成一次读操作就要分析新读入的数据中是否有空行。不过在寻找空行的过程中我们可以同时完成对整个 HTTP 请求头部的分析请求行头部域以提高解析 HTTP 请求的效率。
// P137主从状态机主状态机在内部调用从状态机
从状态机
状态说明LINE_OK读取到完整请求并提交到主状态机初始状态LINE_OPEN未读取到完整请求LINE_BAD在一行中单独出现 CRLF提交到主状态机
主状态机
主状态机的初始状态是 CHECK_STATE_REQUESTLINE在成功地处理完请求行后将状态设置为 CHECK_STATE_HEADER从而实现状态转移。
状态说明CHECK_STATE_REQUESTLINE处理请求行CHECK_STATE_HEADER处理头部字段