转自:http://www.ibm.com/developerworks/cn/web/wa-ltwebserv/
最近在做WEB服务器,参考下这些精致的代码
虽然轻量级 Web 服务器有很多共同之处,但是各有各的不同。大多数轻量级 Web 服务器是用 C 编写的,但是实践证明,有些其他实现语言也可以成功地用于实现服务器,对此我已经做了实验,这些语言包括 Erlang、Java、Lisp、Lua、Perl、Python 和 Tcl。如果其中有您喜欢的语言,那么也许可以找到适合您的 Web 服务器。
由于很多特定的原因,您可能会将目光投向某种 “不常见” 的语言:
教学:使用轻量级 Web 服务器来制定一个重要、但是并不太大的目标。这是获得使用某种语言的经验的好方法。 虽然用 C 编写的轻量级 Web 服务器大小为 10-50 KB,更高级的语言有 100 KB 到数 MB 的运行时,但整个 Web 服务器的源文件可能只占几千个字节。这种 Web 服务器占用的空间很小,因此比 Apache 更易于与技术伙伴共享。 更高级的语言可以使实验更吸引人 —— 例如,添加一个新的 HTTP/1.1 特性可能只需几行源代码。这些轻量级服务器是非常方便的实验材料。 将 HTTP 服务器添加到已有的、用高级语言编写的应用程序中只需增加几行源代码。Athana 可以作为这些主题的例子。它是用 Python 编写的 Web 服务器。它支持 HTTP 多部分(上传)、会话、 cookie 等。从 0.2.1 版开始,Athana 一直被编写在一个单独的、精心组织的源文件中。
如前所述,不同的轻量级 Web 服务器有着不同的优点,它们或多或少独立于编程语言。所有轻量级 Web 服务器都比 Apache 更小、更易于配置。与 Apache 相比,有些轻量级 Web 服务器更快,有些则快得多。有些则强调安全性、重负载下的从容性、可扩展性或者内存占有量。在任何情况下,都可以以一种不适用于 Apache 的方式彻底地理解这些服务器。
哪些特定的产品使这些可能性成为现实?即使只留意 “轻量级” 服务器,面对的也是一个很大的难于管理的产品集合。不过可以将它们按子类来划分:超轻型、关注安全型、支持特定语言型等等。
我特别喜欢其中的超轻型 Web 服务器,它们比 Apache 小得多。如此小的应用程序可以直接记住,系统地、严密地加以考虑,以证明 它们的安全性或可伸缩性。小型 Web 服务器包括:
Cheetah Server,用不到一千行的 C 代码编写而成。 DustMote,一个非常 小的 Web 服务器,用一个大约 3000 字节的 Tcl 源文件实现。 fnord,大小取决于平台和配置,不超过 20K。虽然很小,但是它支持虚拟主机、CGI 和 keep-alive。 ihttpd,使用不到 800 行的 C 代码,包括 CGI,并通过 inetd 提供页面。 im-httpd,非常小的服务器 —— 只有大约 7 KB,链接到 glibc。而且它也非常快。 mattows,支持 CGI,只有 600 行 C 代码。 Scrinchy,虽然很小,不到 30KB,但是支持多种脚本编制语言,包括一种特殊用途的、基于栈的 Sy 脚本语言。 ZWS 演示了一个即使是使用 500 多行带足够注释的 zsh (!) 编写的应用程序 —— 在这里是一个 HTTP 0.9+ 服务器 —— 也可以有多强大。 体积小并不妨碍这些服务器被正式使用。例如,fnord 可以处理数千个同时进行的连接。
也许轻量级作为一个类别最令人印象深刻的成就是高性能服务器:
cghttpd 是一个小型 Web 服务器,它被理解为使用 2.6 系列内核中可用的异步功能的一个试验品。 darkhttpd 是一个快速的、单线程的 HTTP/1.1 服务器。 Gatling 是为高性能设计的。它的特性包括 FTP、IPv6、虚拟主机、CGI 等。 Kernux 是一个 Linux 内核模块,它实现了一个 HTTP 守护进程。 lighttpd 是使用率排名第五的 Web 服务器(排名还在上升)。它为很多同时进行的连接进行了优化:“典型的场景是使用 lighttpd 作为一个下载(off-load)服务器,以提供静态内容……” LiteSpeed Web Server 是一款轻量级商业 Web 服务器,强调性能和安全性。 LiteSpeed Technologies 公司宣传为静态内容提速了 6 倍,在解释页面方面也有一定的提高。 Miniature JWS,也称 tjws,它是基于 Java 的 Web 服务器,可以处理 servlet、JSP 和数千个并发连接,而大小只有 77 KB。它的作者声称它 “比 Apache 2.x 快 10%”。 Yaws 是用 Erlang 编写的一款高性能 HTTP/1.1 服务器。
有些 Web 服务器被实现为类或库,以便嵌入 到较大的应用程序中。 在这些 Web 服务器当中,我发现特别有趣的有:
EHS —— “嵌入式 HTTP 服务器”,被设计为一个 C++ 类,用于嵌入到较大的 C++ 应用程序;还有 Embedded TCL Web Server,它是一个很普通的 Web 服务器,支持 SSL 和 Basic Authentication,速度非常快 —— 其作者使它至少与 lighthttpd 和 AOLserver 一样快。它是用不到 100 行 Tcl 编写的。
Python 是几种适合不寻常环境的 Web 服务器的实现语言,这些 Web 服务器包括:
cdServer 是一个小型的、用 Python 编写的 HTTP 服务器,它 “被设计用来提供来自 CD-ROM 的(静态)内容” 。它在提供动态内容方面能力有限。我们有几个涉及不受影响的 “live CDs” 的项目,在这些项目中像 cdServer 之类的工具很关键。 edna,一款智能的用 Python 编写的 MP3 服务器,它是用 HTTP 实现的。
还有其他一些用 Perl 和其他不出名的语言编写的轻量级 Web 服务器:
Camlserv,用 ocaml 编写的一个完整的 Web 服务器,目标是 “高度交互式的 Web 页面”。它由几千行 ocaml 编写而成,其中大部分代码都与 MySQL 和 HTML 的特殊处理有关。 dhttpd 用和 Apache 相同的格式记录访问。它支持 CGI,并具有内建的 Perl 解释器、虚拟主机、IPv6、带宽管理和安全性等方面的特性。 DNHTTPD 是用 Perl 编写的,用于 UNIX®。它支持虚拟主机、SSL 连接、CGI 等。 Jellybean 是用 Perl 编写的基于 HTTP 的 Perl Object Server。 lns.http 是一个 Common LISP HTTP/1.1 Web 框架。 Mongrel 是用 Ruby 编写的、用于 HTTP 的一个库和服务器。 Nanoweb 是用 PHP 编写的一款快速、健壮的 Web 服务器。它宣称具有丰富的特性,包括完全遵从 HTTP/1.1、访问控制、身份验证、虚拟主机、SSL 兼容性等。 Naridesh 是用 Perl 编写的 Web 服务器。 OpenAngel 是用 Perl 编写的。它强调的重点是安全性。 Xavante 是用 Lua 编写的 HTTP/1.1 Web 服务器。 XSP 是用 C# 编写的,用于运行 ASP.NET。
有时候您可能需要其他一些用 C 编写的、具有不常见的次要优势的轻量级 Web 服务器:
ABYSS 可以在 UNIX 和 Win32 之间移植,其 “目的是成为完全遵从 HTTP/1.1 的 Web 服务器”。它占用的内存很少。 Anti-Web HTTPD(也称 “Anti-Web”、“awhttpd” 和 “AW”)是一款单进程、无线程、支持 CGI 的服务器,它强调安全性和简单性。 MHTTPD 支持从外部文件或 LDAP 服务器进行的 MHTTPD Basic Authentication。 mini-httpd 可以在一个系统线程中处理多个并发请求,但是在主机上占用的内存或 CPU 很少。 Naken Web 类似于很多其他的轻量级服务器 —— 它支持 Basic Authentication、静态内容等 —— 但是它的作者将它设计为用于 Webcam 操作,并且在 Gumstix、WRT54GL、OpenWrt 和其他新的平台上运行。 Null httpd 是一款多线程的、简单的、可移植的 Web 服务器。 Seminole 是一款商业 Web 服务器,内存需求较小,功能较多。 thttpd throttle,支持 chroot、 Basic Authentication 等。