Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

开源软件实践之使用有限状态机解析http协议

$
0
0

    先简单介绍一下目前这个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协议,一个线程解析一个客户端的,肯定不会相互影响涩。

   今天到此为止,边学习,边实践和边总结,提高自己的学习能力,编程实践能力和总结能力。


   下一篇博客不出意外应该是配置文件的研究,设计与实现分享。


作者:wanweiaiaqiang 发表于2013-11-21 23:21:21 原文链接
阅读:36 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>