操作系统:ubuntu10.04
前言:
为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能。这就需要在设备中实现web服务器。
现在在嵌入式设备中所使用的web服务器主要有:boa、thttpd、mini_httpd、shttpd、lighttpd、goaheand、appweb和apache等。
一,比对
Boa
1.介绍
Boa诞生于1991年,作者Paul Philips。是开源的,应用很广泛,特别适合于嵌入式设备,网上流行程度很广。它的官方网站说boa是最受人喜爱的嵌入式web服务器。功能较为强大,支持认证,cgi等。Boa 是一个单任务的HTTP SERVER,它不像传统的web服务器那样为每个访问连接开启一个进程,也不会为多个连接开启多个自身的拷贝。Boa对所有的活动的http连接在内部进行处理,而且只为每个CGI连接(独立的进程)开启新的进程。因此,boa在同等硬件条件下显示出更快的速度。测试表明boa在Pentium 300MHZ下能够每秒钟处理几千次点击,在20 MHz 386/SX下能够每秒钟处理几十次点击访问。
Boa和thttpd等,与apache等高性能的web服务器主要区别是,它们一般是单进程的服务器,只有在完成一个用户请求后才能响应另一个用户的请求,无法并发响应,但这在嵌入式设备的应用场合里已经足够了。
Boa设计主要出于速度和安全,是指不被恶意用户暗中破坏,而不是指它有很好的访问控制和通信加密。可以添加SSL来保证数据传输中的保密和安全。
Boa有最少的资源需求。非常少的内存需求,能耗很小。 特别适合于嵌入式市场。含有gcc 2.95.3和 GNU libc 2.2.5的boa的二进制文件大小为61K( 495K statically linked )。使用库uClibc,boa变得更小(92K statically linked)。
有人曾做过测试:所用环境AMD Duron 700,384MB RAM, RealTek 8139,SiS900 chipset-based NICs ,LinkSys 10/100 hub,Linux 2.4,结果是:Boa的虚拟内存(VmSize)大小是1696kB,85%是库文件。虚拟内存数据(VmData size)大小是108kB。Boa每次连个并发连接消耗掉20kB的内存。
Thttpd
1.介绍
Thttpd是ACME公司设计的一款比较精巧的开源Web服务器。它的初衷是提供一款简单、小巧、易移植、快速和安全的HTTP服务器,而事实上,Thttpd也正是这样一款服务器。它在Unix系统上运行的二进制代码程序,仅仅400k左右,在同类Web服务器中应该是相当精巧的。在可移植性方面,它能够在几乎所有的Unix系统上和已知的操作系统上编译和运行。Thttpd在默认的状况下,仅运行于普通用户模式下,从而能够有效地杜绝非授权的系统资源和数据的访问,同时通过扩展它也可以支持HTTPS、SSL和TLS安全协议。Thttpd尤为称道的是已经全面支持IPv6协议, 并且具有独特的Throttling功能,可以根据需要限制某些URL和URL组的服务输出量。此外,Thttpd全面支持HTTP 1.1协议(RFC 2616)、CGI 1.1、HTTP 基本验证(RFC2617)、虚拟主机及支持大部分的SSI(Server Side Include)功能,并能够采用PHP脚本语言进行服务器端CGI的编程。
thttpd是一个非常小巧的轻量级web server,它非常简单,对于并发请求不使用fork()来派生子进程处理,而是采用多路复用(Multiplex)技术来实现。因此效能很好。对于小型web server而言,速度快似乎是一个代名词,通过官方站提供的Benchmark,可以这样认为:thttpd至少和主流的web server一样快,在高负载下更快,因为其资源占用小的缘故。Thttpd还有一个较为引人注目的特点:基于URL的文件流量限制,这对于下载的流量控制而言是非常方便的。象Apache就必须使用插件实现,效率较thttpd低。Thttp是开源的。是用C语言编写的。使用的很多。
编译后的可执行的二进制文件为60kB左右,与boa差不多。版本已从1.90a发展到2.25b,
使用内存很少,没查到具体的数据。
2.特点、功能
thttpd中是一个简单,小型,轻便,快速和安全的http服务器.
特点:
简单:它能够支持HTTP/1.1协议标准,或者超过了最低水平
小巧:它具有非常少的运行时间,因为它不fork子进程来接受新请求,并且非常谨慎
的分配内存
便携:它能够在大部分的类Unix系统上运行,包括FreeBSD, SunOS 4, Solaris 2, BSD/OS, Linux, OSF等等
快速:它的速度要超过主流的Web服务器(Apache, NCSA, Netscape),在高负载情况下,它要快的多。
安全:它努力的保护主机不受到攻击,不中断服务器
thttpd,适合静态资源类的服务,比如图片、资源文件、静态HTML等等的应用,性能应该比较好,同时也适合简单的CGI应用的场合。
Shttpd
1.介绍
Shttpd,开源。它是另一个轻量级的web server,具有比thttpd更丰富的功能特性,支持CGI, SSL, cookie, MD5认证, 还能嵌入(embedded)到现有的软件里。最有意思的是不需要配置文件!由于shttpd可以轻松嵌入其他程序里,因此shttpd是较为理想的web server开发原形,开发人员可以基于shttpd开发出自己的webserver,官方网站上称shttpd如果使用uclibc/dielibc(libc的简化子集)则开销将非常非常低。
小巧、快速、不膨胀、无需安装、简单的40KB的exe文件,随意运行
支持GET, POST, HEAD, PUT, DELETE 等方法
支持CGI, SSL, SSI, MD5验证, resumed download, aliases, inetd模式运行
标准日志格式
非常简单整洁的嵌入式API
对库dietlibc 支持友好,对uClibc (*)不友好。
容易定制运行在任意平台:Windows, QNX, RTEMS, UNIX (*BSD, Solaris, Linux)
编译后的可执行的二进制文件为40kB左右.
网上查询结果是有关内容很少。使用范围不广。有网友对它的评论是:shttpd功能算是比较全的, 但在处理二进制数据时不够稳定, 时有异常. 有待观察。
官方网站:http://shttpd.sourceforge.net/
Lighttpd
1.介绍
Lighttpd是一个德国人领导的开源软件,历时只有三年。其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用户是非常重要的,因为迁移到lighttpd就必须面对这些问题。实用起来lighttpd确实非常不错,apache主要的问题是密集并发下,不断的fork()和切换,以及较高(相对于 lighttpd而言)的内存占用,使系统的资源几尽枯竭。而lighttpd采用了Multiplex技术,代码经过优化,体积非常小,资源占用很低,而且反应速度相当快。利用apache的rewrite技术,将繁重的cgi/fastcgi任务交给lighttpd来完成,充分利用两者的优点,现在那台服务器的负载下降了一个数量级,而且反应速度也提高了一个甚至是2个数量级!lighttpd 适合静态资源类的服务,比如图片、资源文件、静态HTML等等的应用,性能应该比较好,同时也适合简单的CGI应用的场合,lighttpd可以很方便的通过fastcgi支持php。
Lighttpd缺点就是bug比较多,软件并不稳定,而且文档太简略,有些功能需要你自己猜测才懂得怎么配置。尤其是使用内存,很难说清楚具体使用量,一般在10-20M(繁忙站点),但有时候会突发到100多M,并稳定下来。不过相对apache的使用量,这个已经不算多。
lighttpd虽然是web服务器中的轻量级。但对于嵌入式web服务器来说还是较大的一个web服务器,功能较强。
有人评论lighttpd:lighttpd、apache 属重量级服务器, 成熟稳定, 体积较大, 在复杂的嵌入式应用上可选用.
Lighttpd使用的不广泛,在google中搜索:嵌入式 lighttpd,结果几乎没有相关的内容。Lighttpd使用内存比其它小型嵌入式web服务器内存资源要多。毕竟它不是专为嵌入式设备开发的。
Goahead
1.介绍
GoAhead Webserver是为嵌入式实时操作系统(RTOS)量身定制的Web服务器。它的目标也许不在于目前的WEB服务器市场,而是面向当嵌入式系统深入我们的工作与生活的明天,那时,它也许会成为使用最广泛的WEB服务器。GoAhead Webserver构建在设备管理框架(Device Management Framework)之上,用户可以像标准的Web Services一样来部署自己的应用,不需要额外的编程。GoAhead Webserver支持SOAP客户端(Simple Object Access Protocol,简单对象访问协议),XML-RPC客户端,各种Web浏览器和单独的Flash客户端。GoAhead Webserver支持一种类ASP的服务器端脚本语言,其语法形式和微软的ASP语法基本相同(Active Server Page)。GoAhead Webserver是跨平台的服务器软件,可以稳定地运行在Windows,Linux和Mac OS X操作系统之上。GoAhead Webserver是开放源代码的,这意味着你可以随意修改Web服务器的功能。这款WEB服务器非常小巧,它的WIN CE版本编译后的大小还不到60k,它的输出通常也是面向一些小屏幕设备。在性能方面,使用一颗24MH z的68040处理器,它的响应速度为20次/秒,使用266MHz的Pentium处理器可以达到50次/秒的响应速度。
功能、特点
· 很小的内存消耗
· 支持认证功能Digest Access Authentication (DAA)
· 支持安全的通信,例如SSL(安全的套接字层)
· 支持动态Web页面,如ASP页面
· 可以使用传统的C语言编程定制Web页面里的HTML标签
· 支持CGI(公共网关编程接口)
· 嵌入式的JavaScript脚本翻译器
· 独特的URL分析器
· 它基本上属于一个HTTP1.0标准的WEB服务器,对一些HTTP1.1的特性如(持久连接)也提供了支持。每秒65次connections
2.可执行文件大小、内存使用情况
内存需求60K,它的WIN CE版本编译后的大小还不到60k。
自 2004 年 2.18 版之后, GoAhead 官方不再对它免费许可的升级和支持,如果是学习和研究之用, 移植很方便, 不必关心太多; 如果商用, 那些已知的 bug 就必须手工去改,包括对 cgi 的支持, 对操作系统差异而引用的 bug,参考下这个 http://www.eybuild.com/develop/demoshow.htm ,这个就是用的 GoAhead。
GoAhead官方网站:http://webserver.goahead.com/
AppWeb
1.介绍
appWeb有两种许可,一种是GPL,免费的,另外一种是商业许可,有30天的试用期。免费的版本在http://www.appwebserver.org/ 下载,appWeb的商业版本由Mbedthis公司发布和维护,网址是 http://www.mbedthis.com/。appweb 是下一代嵌入式web服务器,它天生是为嵌入式开发的,它的最初设计理念就是安全。Appweb是一个快速、低内存使用量、标准库、方便的服务器。与其它嵌入式web服务器相比,appweb最大特点就是功能多和高度的安全保障。Appweb简单、方便、开源。
AppWeb提供的一些关键好处:
l 低开发成本。支持cgi/1.1、javastript、esp、php(4and5),加快开发进度。
l 最小的资源需求。一秒能响应3500个请求,非常迅速,并且紧凑(110KB)。
l 灵活的开发环境。Appweb高度模块化,可以根据需要取舍。
l 可靠性
具有的功能:
· 支持嵌入式JavaScript,esp,egi,cgi和php。.
· 容易使用。 大量的例子文档可用。
· 安全。支持SSL、认证。
Apache
最新的apache版本是httpd-2.2.4.tar,6.07MB,解压后为27.2MB,在嵌入式web服务器中很少使用,在网上搜索看到有人在vxwork上用过apache,在其它方面没有,我认为,goahead、appweb具有丰富的功能,没有使用apache的必要。另一个原因是因为apache是一个多进程web服务器,使用的内存很多。
由于apache的prefork工作模式有关。每个apache进程只能同时服务于一个http连接。这种模式好处在于每个进程不互相干扰,稳定性好;缺点也建立在优点之上,就是占用资源多,即使每个进程只使用2M内存(如果使用了php,这点内存根本不够),100的并发连接就用掉200M的内存。
二,开发语言和开发工具
现在的嵌入式linux中CGI程序主要使用C语言。对于编写C语言的CGI程序,可以编写好程序之后,在linux操作系统下编译,用针对硬件平台的linux的交叉编译工具编译就可以,写的html网页界面在记事本写即可。我以前写的CGI程序就是在此环境下写的。这也是最普遍的开发方法。
对于用C语言编写CGI程序还可以使用CSP/eybuild提供的平台库及其开发套件,它可以将CGI程序嵌入式到网页中,可以提高开发效率。传统用C做CGI的方法是直接使用printf() 等标准I/O函数输出HTML代码,这样不但使得C程序和HTML程序交织的混乱不堪,还使得页面输出的流程控制变得非常复杂。CSP与之不同,它充分吸取了ASP/JSP/PHP等以HTML/ XML为模板嵌入脚本语言优点,并充分融合C语言的语言特性。使得CSP的开发更快速、更高效,同时还大大提了最终代码的可读性和维护性。 CSP设计的最原始的初衷,就是要为嵌入式开发定制的一套类似 ASP/JSP/PHP的C语言开发工具。针对设备WEB开发CSP提供了丰富的平台库和开发工具,它们为设备系统的WEB交叉开发和移植提供了有力的支持。通过交叉开发,可以在其它硬功件平台完全未准完毕的情况下进行高层软件的开发。这不仅能为产品开发有效地节约软硬件资源,还为WEB程序提供简单有效地调试工具。
但缺点是,CSP/eybuild不是一个开源的项目,如果你是个人使用或出于学习、研究目的你可以从eybuild的官方站点http://www.eybuild.com 免费下载,或发邮件到 eybuild@hotmail.com 免费索取。它的站点上可以下载针对x86、arm920T的CSP/eybuild开发平台,其它平台需要向网站上定购。如果你想在你的嵌入式设备的开发板上试用或出于学习和研究目的,你也可把您目标板及编译环境的详细资料发给eybuild@hotmail.com,请求为你的目标板单独制作一份交叉编译开发的CSP/eybuild平台。如果你想你的商用产品或项目中使用CSP/eybuild,你必须在CSP/eybuild的商用授权后才可使用。商用授权后您将可以得到很好的技术支持和技术培训。关于商用授权的详细流程,可邮件至eybuild@hotmail.com 垂询。
用C语言编写CGI与其它语言编写CGI的比较:
C语言简洁紧凑,使用方便、灵活,对程序的语法结构要求不是很严,这就使得编程
人员在编程时具有很大的灵活性,可以设计出自己风格的程序。不像UNIX SHELL、Perl和TCL,C语言是一种编译语言,源程序代码要被系统的续译器翻译成机器能直接执行的二进制代码,因此用C语言编写的CGI程序的运行速度要比用解释性语言编写的程序快。使用编泽语言的另一个好处是即使CGI执行程序陷入黑客之手,他们也无法像分析用解释性语言编写的CGI程序那样找到程序中的漏洞。由于C语言最初是针对系统设计的,这使得C语言的字符串处理能力比较差,如果CGI程序需要对字符串进行一些复杂的操作,用C诺言实现起来将比较麻烦,代码量也较多。现在网上用C语言编写的CGI程序仅次于Perl(Perl编写程序简单方便)。
CGI与JSP的比较:
Servlet是Java技术对CGI编程的回答。Servlet程序在服务器端运行,动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。详细内容见备注。JSP是强于CGI,这也是现在CGI技术的使用没有JSP使用多的原因。但现在嵌入式web服务器端程序开发,还是CGI较多。由于使用JSP技术,在嵌入式web服务器开发中很少使用,在网上没有查到关于在嵌入式web服务器上应用的有关内容。
要实现阅读器的lmt,所需的CGI代码量估计不会很多,关键在于调试。
三,结论
根据上面的分析,考虑到使用范围宽广程度,在小型服务器、不要求太强功能,推荐选用boa、thttpd,其实它们足可以满足大多数情况下的需求,也是使用最广、可参考最多的嵌入式web服务器。如果要求强大的功能,支持javastript等,推荐选用goahead、appweb。
四,参考文件
1,http://blog.csdn.net/newnewman80/article/details/8809560