我用C和socket从零开始写了一个Web服务器,实现了静态文件服务功能和最基本的CGI服务。我给这个程序命名为FleaHttpd,因为它像跳蚤一样小,目前代码只有不到500行,放在了Google Code上:

http://code.google.com/p/fleahttpd/

下载地址在这里:

http://fleahttpd.googlecode.com/svn/trunk/

跳蚤虽小,五脏俱全 :smile: FleaHttpd能响应浏览器的GET/POST请求。用apache的ab测试表明,在concurrency为1的情况下静态文件的访问速度可以达到Apache的三倍,测试结果在这个页面:

http://code.google.com/p/fleahttpd/wiki/BenchmarkResults

对同样一个37103字节的文件访问10000次,FleaHttpd可以在1.6秒完成万次请求:

Requests per second: 6224.93 [#/sec] (mean)
Time per request: 0.161 [ms] (mean)
Time per request: 0.161 [ms] (mean, across all concurrent requests)
Transfer rate: 225817.40 [Kbytes/sec] received

Apache完成万次请求则需要5秒:

Requests per second: 2022.08 [#/sec] (mean)
Time per request: 0.495 [ms] (mean)
Time per request: 0.495 [ms] (mean, across all concurrent requests)
Transfer rate: 73764.41 [Kbytes/sec] received

基于FleaHttpd的网站(王垠主页的镜像):

http://limiao.net:8080/

网站中包括1447个文件(HTML/JPG/PNG/CSS/PDF/GZ等),共114M。

目前FleaHttpd没有负载平衡,将来准备用OpenMPI把FleaHttpd写成一个并行程序,在cluster上运行;并加入memcached,进一步加快静态文件的访问速度;目前CGI的响应比Apache慢,可能是CGI程序载入的速度比较慢,不过FleaHttpd的主要目的是提供静态文件服务,或者是非常专门的CGI动态服务(提高速度的最好办法是直接把CGI程序的源代码编译到fleahttpd中去让网站和服务器成为一个整体,在启动时就载入)。

阅读(1152 次)

Creative Commons 授权
此文, 除非有特别申明, 的授权协议是 Creative Commons Attribution-Noncommercial 2.5 China Mainland 网站授权.