web 服务器功能模块设计

来源:互联网 发布:淘宝会员名叫什么好呢 编辑:程序博客网 时间:2024/05/21 09:49

正好这段时间多,公司没啥项目.做一个httpserver服务器玩玩,平时多练练,在项目中开发时才能更加的顺手.

每个程序员都应该尝试下写博客
http://droidyue.com/blog/2017/01/02/why-every-programmer-should-try-to-write-blogs/

目前开源的web服务器主要有:
https://h2o.examp1e.net/

http请求库libCURL

我推荐一个比较小众的:
http://iunknown.iteye.com/blog/59804

1.先看完libevent.初步理解libevent的源代码这种事件驱动的网络框架

暂时先采用C语言版来实现,后面再完善成C++版本.

webserver模块分析和设计
1.命令行解析功能
命令行参数主要有哪些?服务器侦听端口,最大客户端数量,网站的根目录,配置文件名称,连接超时时间扥等

2.配置文件解析(tinyxml库使用)
配置文件为服务器的主配置选项,相同选项,配置文件的配置将覆盖命令行的配置.
3.日志库
使用glog库,分等级将日志输出.

4.多客户端支持(网络传输层,负责接收连接,数据接收,数据发送)
连接的处理,请求数据的接收,响应数据的发送,客户端请求到来的时候,主线程查看线程池中是否有空闲的工作线程,
有:分配任务,没有:创建新的线程.此处采用libevent框架来实现.减少多余的网络问题.

5.http头部分析
5.1解析http method,如GET,POST,HEAD等等
5.2 解析http的版本
5.3 解析URI,即请求资源的地址.

6.http URI的分析设计
请求主机的位置以’/’开始,资源位置的最后一个’/’后的字符串为实际请求的文件名.需要根据文件名来判断请求资源的类型,对于一个以”%”开头的字符,需要进行转换后使用真正的值,其后面的两个字符拼成一个字符.

7.http支持方法的分析设计
暂时仅支持GET方法,服务器对应GET方法的处理逻辑分为:
头部信息的组织(http response响应的头部信息)
文件内容的发送

8.http支持CGI的分析设计(查阅http CGI的资料和使用方法)

9.http错误处理的分析设计
9.1用户的请求发生错误
9.2服务器端发生错误
9.3网络传输过程中发生错误时

类设计
多客户端并发支持->网络类,libevent构造网络框架

0 0
原创粉丝点击