先简单介绍一下目前这个http服务器的开发进度,首先说明一下代码都还很粗糙,因为没有做过多的错误处理和逻辑封装,不过这也还原一个真实的开发过程,不像很多开源软件可能都是已经比较成熟了才开始发布和开源。
(1)目前采用半同步/半异步的衍生模式半同步半反应堆实现了主体功能框架,后面打算改成改进的高效的半同步/半异步的模式;
(2)实现了日志功能;
(3)能够解析http协议,响应get请求;
(4)简单的压力测试代码,使用scons代码管理工具;
(5)http服务器实现源代码还是通过aotuconf工具管理。
下一步计划:
(1)改进主体框架模式,采用主线程只处理连接相关的事件,也就是只负责监听socket相关事件的注册与响应,采用线程池处理具体某一个连接的读写请求;
(2)研究nginx的配置文件设计与解析,然后设计自己的配置文件结构与解析;
(3)整理代码,处理各种可能出现的错误情况;
(4)完善http协议的解析,支持更多的请求操作;
(5)研究nginx的主体框架,以便改进自己的。
今天就简单介绍一下,本开源软件或者项目解析http协议的方式,首先大家需要先熟悉http协议吧,这个可以自己看协议文档,也可以找一本http协议的书熟悉一下。目前实现的解析http协议还很简单,不过思想,逻辑和框架肯定是有了,后面只是需要改进和添加更多协议内容,目前采用的就是有限状态机的方式解析http协议,因为很多应用层的协议(http就属于一种)头部包含很多数据类型字段,每种类型字段可以映射为逻辑单元的一种执行状态,那么我们就可以根据这些类型编写相应的处理逻辑。简单的编程框架如下:
switch (type) { case TYPEA: process_type_a(); type = TYPEC; break; case TYPEB: process_type_b(); type = TYPEC; break; ...... }
处理怎么解析和处理的http协议的请阅读源代码,源代码中如果我没有记错应该有注释的。
总结一下:有限状态机在复杂的服务器编程经常使用到,大家看过我前面的博客都知道我研究了一段时间的glusterfs,这是一个节点对等的分布式文件系统,采用fuse模式实现的,因为是对等节点,那么怎样来维护各个节点的一致性,那么就只有使用分布式锁了,但是往往一个操作需要很多步骤才能完成,为了各个节点有序的完成这些步骤,glusterfs内部实现了一个很复杂的有限状态机,每一个状态都需要所有对等节点都完成了才能进入下一个状态,而且在执行期间很多需要加锁操作,那么加锁也是其中的一个状态,不同阶段的锁属于不同的状态,这么算下来,有些操作可能要经过十几个状态才能最终完成这个有限状态机,也是真配置设计和实现glusterfs的那一帮人呀。
总之一句话,有限状态机是服务器编程的一种比较高效的方法,很多场景下起始很多状态可以并行,只要不相互影响结果和依赖结果,当然是指的多线程处理不同的业务逻辑,比如解析http协议,一个线程解析一个客户端的,肯定不会相互影响涩。
今天到此为止,边学习,边实践和边总结,提高自己的学习能力,编程实践能力和总结能力。
下一篇博客不出意外应该是配置文件的研究,设计与实现分享。