轻量级的web server

来源:互联网 发布:淘宝店铺最多几个客服 编辑:程序博客网 时间:2024/06/05 16:34

一、背景

web接口是一个应用系统常用的接口,本文所说的轻量级的web server是指应用系统不以web访问为主,web接口提供辅助作用,例如,修改配置等,此时,对web server的要求是程序简单、无或者很轻的并发、能嵌入到应用中最好。

二、比较

在开源的web sever中,应用最广的是apache,它的功能很强,但是一个重量级的应用,不符合我们的要求,另外两个有名的web server是nginx和lighttpd,下载后,下载后大小在1M左右,据文档介绍,它们也可以用在嵌入式系统,所以从“份量”上将是轻量级的,不过,它们是独立的应用,不是高手的话,很难将其嵌入到自己的应用中。那么是否还有更轻量级的?最后找到了Robin(wrhttpd)。以下是它们的一点简要介绍,有关Nginx和Lighttpd更详细的介绍,请参阅其官方网站。

1. Nginx

Nginx是俄罗斯人开发的,它是一个很高效的web server,你日常访问的网站中,有些就采用的是Nginx(据报导大陆的有新浪博客、网易、 腾讯,有些网站的出错信息中,就包含nginx字样)。Nginx是基于消息驱动的,最大特点就是高并发,低消耗,它也可以用作HTTP代理服务器和邮件代理服务器(因而可以起到负载均衡的作用),另外它是跨平台的。

Linux上Nginx的安装依赖于pcre,这是一个与perl兼容的正则表达式库。

对大部分人来说,Nginx的最大的障碍是复杂的使用规则,特别是主配置文件nginx.conf的编写。

2. Lighttpd

Lighttpd是一个德国人领导的开源软件,它特点与Nginx类似:高效、低耗,也有许多网站使用它(YouTube, wikipedia ,meebo)。它支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。

3. wrhttpd

wrhttpd可以说是一个更小的web server,只有几十K,完全可以源代码级嵌入到我们的应用中,它有两个版本:

Robin_e(embedded):顾名思义,就是可以用于嵌入式的web server,因此也就是跨平台的(windows,linux),它采用C语言,本文主要介绍的就是该程序。

Robin_w:目前这个版本只适合于windows平台,它的处理与Robin_e类似,但采用的是cpp语言,因此从感觉上稍有不同(这个版本中多一个CGIBase类)。

 

三、Robin_e源代码介绍

下载该程序代码(http://wrhttpd.googlecode.com/files/robin_e_1.1.tar.gz),解压后的目录结构、文件如下图。


wrlib目录包含程序的主体文件,main.c和cgi.c实际上是一个应用(例子),www目录是web server的主目录,里面有示例性的html以及其他资源文件。

wrlib目录下各文件的说明如下。

analysis.c

对HTTP请求的句法分析

http.c

Server实现的主框架,包括初始化、侦听、多线程处理及退出

mg_compat.c

一些文件或socket操作的宏,函数start_thread(跨平台的线程函数)

misc.c

主要定义了字符转换函数

request.c

被http.c中的函数调用,实现对HTTP请求的处理,当http请求没有错误时,按要求调用cgi进行处理或者返回一个文件(html等)

wrhash.c

Hash的实现

wrio.c

文件io及网络io的实现

wrmpool.c

内存(缓存)的管理

wrstring.c

对字符串操作的一些扩展

 程序大致的调用过程如下图。


图中虚线框中的东西需要自己写,服务器的应答主要在http.c和request.c中完成,其余的文件都是支撑性质的。值得注意的是,该服务器是多线程的:主线程一个,侦听线程一个,处理每个请求的线程若干。服务器的运行参数在http.h中设置,不是将配置单独写到配置文件中,大概为了简单吧。

四、一些讨论

1. 不同的要求采用不同的web sever,本文的重点在于server的简单、易用,从这点上看,Robin_e是合适的,它代码很少,总代码大致有2千行,因此即使全部看一遍,也不会太费劲。

2.Robin_e能以源代码的方式嵌入到我们的应用程序中,与我们的应用共享一个进程。对稳定性要求高的web server来说,这样可能不合适,但可以减少编程的复杂性,适用于不以web服务作为主要功能的场合。


(结束本文前,找到一个复杂一些的web sever,叫mongoose,总共不超过2万行代码,且代码集中到一个文件中,也便于部署或将其源代码级嵌入到应用程序中)


原创粉丝点击