C语言嵌入式web服务

:boa、thttpd、mini_httpd、shttpd、lighttpd、goaheand、appweb和apache等。

C语言 1

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来保证数据传输中的保密和安。

2.操作系统

All POSIX (Linux/BSD/UNIX-like
OSes)

3.版本

起0.90届今天之新颖披露版0.94。最新披露版0.94:boa-0.94.13.tar大小为120k,解压后呢436k,编译之后的但是实施代码在60k横。最近付出版本:boa-0.94.14rc21

4.可执行程序的深浅、内存需求情况

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的内存。

参照比较表:

Server

Stripped Binary Size

VmSize

External Libraries

Boa 0.94.13

61kB

1700kB

0

Apache 1.3.26

277kB

11,000kB

9

thttpd 2.20c

64kB

1800kB

0

5.功能、特点

l 支持HTTP/1.0(实验性的、有极的支持HTTP/1.1)

l
支持CGI/1.1,编程语言除了C语言外,还支持Python,
Perl, PHP,但对PHP没有一直支持,没有mod_perl,
mod_snake/mod_python等。

l Boa支持HTTP认证,但无支持多用户征。

l 它可以安排成SSL/HTTPS和 IPv6。

l 支持虚拟主机功能。

Boa服务器和其它服务器的两样:

为追求速度及简单性,boa服务器在片端不比让一些流行的web服务器。

CGI程序的REMOTE_HOST环境变量没有设置

The REMOTE_HOST environment variable is not set for CGI programs, for
reasons already described. This is easily worked around because the IP
address is provided in the REMOTE_ADDR variable, so (if the CGI program
actually cares) gethostbyaddr or a variant can be used.

Boa不具有ssi(server side includes)。

We don’t like them, and they are too slow to parse. We will consider
more efficient alternatives.

Boa不备访问控制。

Boa will follow symbolic links, and serve any file that it can read. The
expectation is that you will configure Boa to run as user “nobody”, and
only files configured world readable will come out.

没有chroot选项。

There is no option to run chrooted. If anybody wants this, and is
willing to try out experimental code, contact the maintainers.

官方网站:www.boa.org

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语言编写的。使用的杀多。

2.操作系统 
Thttpd支持多阳台,如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。

3.版本

风行版本:thttpd-2.25b.tar 130kB,解压后497kB

  1. 可执行程序的高低、内存需求情况

编译后的但实行的二进制文件为60kB左右,与boa差不多。版本已经起1.90a发展及2.25b,

以内存很少,没查及现实的数码。

5.特点、功能

thttpd中凡是一个简单,小型,轻便,快速与平安之http服务器.

特点:

大概:它亦可支持HTTP/1.1商议正式,或者超过了最低水平 
精致:它富有很少的周转时,因为它们不fork子进程来接受新请求,并且非常严谨

的分配内存

即带:它亦可以大部底类Unix系统上运行,包括FreeBSD, SunOS 4, Solaris 2,
BSD/OS, Linux, OSF等等 
快捷:它的快要超越主流的Web服务器(Apache, NCSA,
Netscape),在青出于蓝负荷情况下,它如果快的大半。 
安:它努力的保安主机不受攻击,不刹车服务器

thttpd,适合静态资源类的劳动,比如图片、资源文件、静态HTML等等的以,性能应于好,同时为称简单的CGI应用之场合。

功能:

l 支持CGI1.1。

l 支持中心的求证功能。

l 支持Chroot功能

l 支持Throttling。

l 支持IPv6。

l 支持多虚拟主机功能。

l 支持由定义错误页。

l 支持标准日志记录。

l Thttpd处理了大气之信号,这些信号是经过规范的Unix kill(1)
command发出的。

l 通过扩充其也得以支撑HTTPS、SSL和TLS安全磋商。

动建议:
对于那些并发访问量中等,而同时需要比较强响应能力、并想能控制用户访问流量,而且产生比较高安全性要求的用户而言,thttpd
Web服务器显然是一个于好之挑。 thttpd目前的新式版本是2.2.5本子。

下图为www.acme.com/software/thttpd网站针对几乎栽web
server比较图。

C语言 2各种服务器的于:

· Software – 哪种web服务器

o Name

o Version

o Released – 什么时候发布的

o Active devel – 是否当前尚于付出被。

· Features –一些生死攸关服务器的风味

o Model – what kind of server it is. The models are:

§ fork – start a new process for each request.

§ pre-fork – pre-start a pool of processes which each handle multiple
requests.

§ threads – use threads instead of processes.

§ Java threads – this version of
the Java runtime uses “Green threads”
instead of native threads, so it acts more like the select-based
servers.

§ select – use non-blocking I/O and the select() system call to handle
multiple requests in a single process, single thread.

从点可以看thttpd、boa都是采用select方式,apache使用的凡pre-fork方式,由于apache是基本上进程方式,thttpd、boa是一味进程方式,所下的内存要多低于apache,且速度快于apache。

o Auto-conf (自动配置)- whether there’s a script to automatically
configure the build process for your OS.

o Basic auth (基本证明)- whether the server supports Basic
Authentication, for password-protected web pages.

o Chroot – whether the server lets you use the chroot() system call to
enhance security.

o Throttling – the ability to set bandwidth limits on certain pages, so
they don’t use more than their fair share of the server’s resources.

· Size –各种服务器的分寸

o Tar bytes – the uncompressed source tarchive size.

o Source files – how many source and header files.

o Source lines – how many lines in the source and header files.

o Exe – the executable size. For the compiled program this is size of
the main executable file, stripped. For the Java servers it’s the total
size of the .class files or .zip files. For Roxen it’s the size of the
Pike interpreter.

· 基础测试网。The benchmark test system is a 297MHz Ultra Sparc with
256MB RAM / 512MB swap running Solaris 2.6, otherwise totally quiescent.
RLIMIT_NOFILE is 256 soft / 1024 hard, and v.v_maxup is 3941.

· RPS – 每秒响应请求次数。maximum requests per second. This is
determined by running the test load at various parallel-request rates
and finding the maximum response rate. See the graph below for the full
data.

o Small files – the small-file test load consists of 1000 files, each
1KB long, requested randomly.

o CGI – the CGI test load consists of a trivial “hello world” C
program. .

· Max users – 最要命拍卖的用户数。This is determined by running the test
load at various parallel-request rates and seeing when it starts
screwing up. Typical screwups are running out of memory or processes, so
that requests start timing out or getting refused.

o Large files – the large-file test load consists of 100 files, each 1MB
long, requested randomly. Also, each connection is throttled to simulate
a 33.6Kbps modem. Note that 1000 33.6Kbps connections is 3/4 of a T3.

方的较中,thttpd和boa都未曾采取新型版本,boa的新星版本都支持中心证明、自动配置等功效。Thttpd和boa的基本功能差不多,可以互相替换。现在选用web服务器时,同时产生boa和thttpd的景下,选择下boa的事态多多。我以同一首论文被涉及一点,说:thttpd在运作过程遭到所急需的资源要远不止boa,但尚无征了。

合法地址:http://www.acme.com/software/thttpd/ 
下载地址:http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz

Mini_httpd

  1. 介绍

Mini_httpd是一个微型的HTTP服务器。开源,它的性不高,但是它非常适合于中访问量的站点。Mini_httpd和thttpd都是ACME
Labs 开发之软件,功能尚未thttpd强。

  1. 操作系统

与thttpd相同。

  1. 版本

披露之本子从1.00至1.19。最新披露的本是version 1.19.tar
41kB,解压后为140kB。

  1. 功能、特点

它实现了HTTP服务器的享有的基本功能,包括:

· 支持CGI功能

· 支持中心的说明功能

· 支持安康 .. 上级目录功能

· 支持通用的MIME类型

· 支持目录列表功能

· 支持下 index.html, index.htm, index.cgi 作为首页

· 支持多单根目录的虚拟主机

· 支持标准日志记录

· 支持由定义错误页

· Trailing-slash redirection

· 它可配备成SSL/HTTPS和 IPv6.

5.可执行文件大小、内存以状况

编译后或者只要自愧不如boa、thttpd,内存以或者低于boa、thttpd。Mini_httpd的功力,thttpd功能几乎都盖了。

mini_httpd 也是对立较适合学习、实验应用,大体实现了一个Web
Server的效益,支持静态页和CGI,能够用来放置有私有简单的事物,不适当投入生产用。

官地址:http://www.acme.com/software/thttpd/ 
下载地址:http://www.acme.com/software/mini_httpd/mini_httpd-1.19.tar.gz

Shttpd

1.介绍

Shttpd,开源。它是别一个轻量级的web
server,具有比thttpd更丰富的功效特色,支持CGI, SSL, cookie, MD5认证,
还能坐(embedded)到现有的软件里。最有趣的是免需配置文件!由于shttpd可以轻松嵌入其他程序里,因此shttpd是较为理想的web
server开发原形,开发人员可以根据shttpd开发出团结之webserver,官方网站上称shttpd如果采取uclibc/dielibc(libc的简化子集)则开将那个坏小。

2.操作系统

Windows, QNX, RTEMS, UNIX (*BSD, Solaris, Linux)。

3.版本

    它的风行版本是:shttpd-1.38.tar
,75kB,解压后为278kB。发布的版本从2004年底1.3顶今天的2007年的1.38

4.功能、特点

l 小巧、快速、不暴涨、无需安装、简单的40KB的exe文件,随意运行

l 支持GET, POST, HEAD, PUT, DELETE 等方法

l 支持CGI, SSL, SSI, MD5验证, resumed download, aliases, inetd模式运行

l 标准日志格式

l 非常简单整洁的嵌入式API

l 对库dietlibc 支持好,对uClibc (*)不友好。

l 容易定制运行在随意平台:Windows, QNX, RTEMS, UNIX (*BSD, Solaris,
Linux)

不持有的功用:

virtual hosts, user home directorires, ACL (access control lists),
traffic shaping, keep-alive connections, FCGI (Fast CGI) support.

5.可执行文件大小、内存以状态

编译后的可实行之二进制文件为40kB左右.

网上查询结果是关于内容非常少。使用范围不广。有网友针对其的褒贬是:shttpd功能算是比较全的,
但在处理二进制数据经常未足够稳定, 时有异常. 有待观察。

官方网站:http://shttpd.sourceforge.net/ 
下载地址:http://sourceforge[.NET](http://lib.csdn.net/base/dotnet)/project/showfiles.php?group\_id=126090&package\_id=137886

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。

2.操作系统

    Unix、linux、Solaris、FreeBSD

3.版本

最新版本lighttpd-1.4.17.tar,783kB,解压后也3.48MB

4.功能、特点

下是lighttpd官方网站给起之lighttpd特点,

l virtual hosts

l virtual directory listings

l URL-Rewriting, HTTP-Redirects

l automatic expiration of files

l Large File Support (64bit fileoffsets)

l Ranges (start-end, start-, -end, multiple ranges)

l on-the-fly output-compression with transparent caching

l deflate, gzip, bzip2

l authentication

l basic, digest

l backends: plain files, htpasswd, htdigest, ldap

l fast and secure application controlled downloads

l Server Side Includes

l User Tracking

l FastCGI, CGI, SSI

l PHP-Support:

l same speed as or faster than apache + mod_php4

l includes a utility to spawn FastCGI processes (neccesary for PHP
4.3.x)

l via FastCGI and CGI interface

l support Code Caches like Turckmm, APC or eaccelarator

l load-balanced FastCGI

l (one webserver distibutes request to multiple PHP-servers via FastCGI)

l Security features:

l chroot(), set UID, set GID

l protecting docroot

l strict HTTP-header parsing

5.可执行文件大小、内存以情况

尚无查到具体多少。

Lighttpd缺点就是是bug比较多,软件并无平稳,而且文档太简单,有些效果要你自己猜才知怎么安排。尤其是动内存,很难说清楚具体使用量,一般以10-20M(繁忙站点),但奇迹会爆发到100几近M,并稳定下来。不过相对apache的使用量,这个已经不到底多。

lighttpd虽然是web服务器受到之轻量级。但对此嵌入式web服务器来说还是比较充分的一个web服务器,功能于强。

有人评价lighttpd:lighttpd、apache 属重量级服务器, 成熟稳定, 体积于生,
在纷繁的嵌入式应用上可选用.

    Lighttpd使用的无广泛,在google中找寻:嵌入式
lighttpd,结果差一点无相关的情。Lighttpd使用外存比其它小型嵌入式web服务器内存资源使多。毕竟她不是独占为嵌入式设备支出之。 
官方网站:www.lighttpd.net

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次/秒的响应速度。

2.操作系统

Windows CE, Wind River VxWorks, Linux, Lynx, QNX,与Windows 95/98/NT

3版本

Goahead从2003年始于披露,最新的版:webs218.tar
,827kB,解压后呢2.28MB 
4.功能、特点

· 很有些之内存消耗

· 支持认证功能Digest Access Authentication (DAA)

· 支持安康的通信,例如SSL(安全之套接字层)

· 支持动态Web页面,如ASP页面

· 可以用传统的C语言编程定制Web页面里的HTML标签

· 支持CGI(公共网关编程接口)

· 嵌入式的JavaScript本子翻译器

· 独特的URL分析器

·
它基本上属于一个HTTP1.0正式的WEB服务器,对有的HTTP1.1底特色如(持久连接)也提供了支持。每秒65次connections

5.可执行文件大小、内存以情况

内存需求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简单、方便、开源。

2.操作系统

Linux, Windows, Mac OSX , Solaris

3.版本

    Appweb最新版本是appweb-src-2.2.2 ,大小1.195MB,解压后6.22MB

4.功能、特点

AppWeb提供的一些重大好处:

l 低开发成本。支持cgi/1.1、javastript、esp、php(4and5),加快开发进度。

l 最小之资源要求。一秒能响应3500独请求,非常迅速,并且紧凑(110KB)。

l 灵活的开销条件。Appweb高度模块化,可以根据需要选择。

l 可靠性

不无的效果:

· 支持嵌入式JavaScript,esp,egi,cgi和php。.

· 容易使用。 大量之例子文档可用。

· 安全。支持SSL、认证。 Secure Socket Layer (SSL) including both client
and server certificates. Digest and Basic Authentication. Sandbox
directives to limit denial of service attacks.

· 模块化. Select only the features you need via dynamically loadable
modules. Also supports granular source code compilation directives.

· 性能突出。. Fastest performance in its class. Over 3500 requests per
second on a PC class device. Memory footprint from 110K. Code and web
pages are fully ROMable.

· 符合标准. AppWeb supports HTTP/1.0, HTTP/1.1, CGI/1.1, SSL RFC 2246,
HTTP RFC 2617

· 方便. AppWeb has been ported to Linux, Windows, Mac OSX and Solaris
and support the following CPU architectures: ARM7, MIPS32, i386/X86,
PowerPC and Sparc

Feature Overview

Dynamic Content

· Embedded Server
Pages (ESP)

· Embedded
JavaScript

· Embedded Gateway
Interface (in-memory
CGI)

· CGI/1.1

· PHP (4 and 5)

Embedded Server Pages

· Server-side JavaScripting

· Integrated session state management

· Scripted generation of HTML

· Extensible via new functions

· Manage client state-data via sessions

· Post-back paradigm. Same page for form and post logic

Security

· Secure Sockets Layer (SSL)

· Basic and Digest Authentication

· Directory and URL location based authorization

· Sandbox limits

· Access and access violation logging

Modularity

· Dynamic loading of modules

· Extensible URL handlers

· Extensible / replaceable authorization, SSL and script

Ease of Use

· Apache-style configuration file

· Debugging and trace logging

· Packaged installations for Linux and Windows

· Run as a service / daemon

Other Features

· HTTP server and client access program

· Named and IP based virtual hosts

· Listen on multiple ports

· Compile web pages and files into C code for execution from ROM

Standards

· HTTP/1.1

· CGI/1.1

· Apache configuration file compatibility

Performance

· Multithreaded with high performance thread pool 

· Request throughput (> 3,500 requests per second)

· Scales on multi-cpu systems

· Small memory footprint even under heavy load (from 400K)

Developer Features

· HTTP server and client libraries 

· Shared and static libraries supplied

· C and C++ APIs

· Operate single-threaded or multithreaded (Compile or run-time
selectable)

· Easy, intuitive programming model

· Integrate with common event mechanism: Windows Messages, Unix select,
dedicated thread

· Coding minimized as most features can be specified via the
configuration file

· Cookbook of samples (cut and paste to get going)

· SMP safe

· Extensive debug trace logging

     O’Brien describes AppWeb as a “mini-Apache” in part because it
features compatibility with Apache configuration syntax. “One of our
customers was able to solve a problem using Apache documentation from
the Internet,” O’Brien notes. AppWeb is not based on the apache
codebase, however. “It’s a clean implementation,” says O’Brien. “It’s
really hard to shrink something down.” 
C语言 3 
AppWeb architecture

5.可执行文件大小、内存以状况

    内存以110KB, Small memory footprint even under heavy load (from
400K)。

官方网站http://www.appwebserver.org/

商业网站http://www.mbedthis.com/

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编写程序简单方便)。

C语言 4

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。

备注:

一个网友的个人观点:

boa 的效益于全, 便对嵌入式应用很多功力就是是冗余(如virtual host),
内存使用量较生把. 
thttpd 功能比较少, 实现简单. 内存使用量较少. 同时于便宜扩展. 
shttpd 功能意义算是比较全的, 但在拍卖二进制数据常常无敷稳定, 时有异常.
有待观察. 
light-httpd, apache 属重量级服务器, 成熟稳定, 体积于充分,
在复杂的嵌入式应用上而选用. 
goAhead 是独比较专用的 webserver, 大部分力量还在劳务它自己提供的 goform
功能跟  
          ASP/javascript 功能. 最后之 2.1.8 版仍时有发生不少bug. (见下) 
mini-httpd 同 thttpd 是同一家, 功能几乎统统一样. 
boa 缺陷:  
   (1) 未供 CGI 解析头处理. 
但是按照这个地址方便修改. http://bbs.chinaunix.net/viewthread.php?tid=824840 
   (2) 对 POST 数据利用临时文件缓冲, 对无法缔造临时文件的粗网网,
需要手工改下这部代码. 
重重口告诉当移植时未克POST 数据, 都是此原因. 
   (3) … 
thttpd 缺陷: 
   (1)  CGI1.1 标准支持非完全(不一般影响不大),
未提供针对性商要求的另外HTTP头处理,  
假若:If-Modified-Since, Accept-Language等应用程序就终止不交. 
   (2) 直接利用 socket 到 CGI 应用的重定, 会导致提供大量 POST
数据经常(如齐污染文书),  
        CGI应用不念了所有 POST 数据就是无法向浏览器应答 bug 
   (3) … 
goAhead 缺陷: 
   (1) 专用, 如喜欢它提供的 goform和 asp 令论. 
   (2) CGI 对二进制输出有为数不少 bug. 
   (3) 为实现单一任务处理, 在深平台利用延时轮询接收队列,
处理效率不高. 
   (4) 其它 bug 有不一罗列了, 移植时要一个个立下下. 
个人观点, 仅供参考. 
Good Luck!

CGI, mod_perl, PHP, JSP性能比

即时是网上一样篇有关CGI,mod_perl,PHP,JSP的属性于的稿子,从中可以看其的性能。

测试结果非常挺程度及凭让机器的硬件/软件配置,并论配置变化而发生距离,因此: 
论测试结果 *一味供参考*   
测试用硬件: 
CPU: Intel PII 300(66×4.5)   
RAM: 192M   
HD: IBM 20G(2M cache)   
测试用软件: 
OS: Slackware 7(自行编译的2.2.14基本)   
Web: Apache 1.3.12(标准模块按缺省配置,所有模块静态编译)   
PHP 4.0 RC1(加入了MySQL支持)   
mod_perl 1.23(缺省配置,未加EVERYTHING=1)   
ApacheJServ 1.1(缺省配备)   
JDK: JDK 1.2.2   
JSDK: JSDK 2   
JSP: GNUJSP 1.0.0   
JSP: GNUJSP 1.0.0   
仍测试是为此Apache自带的Apache Bench(ab)进行的,命令为: 
/www/bin/ab -c 20 -n 1000 CGI/脚本URL   
本条命令表示以 20 个冒出连接,进行 1000
次请求。所有测试都于本机进行,各种测试均反复开展5破,去丢最充分无比小值后获取平均值。
我分别测试了C写的CGI、Perl写的CGI、用mod_perl执行的Perl
CGI、PHP和JSP。 
各种CGI/脚本均输出内容类同之略页面,内容如下: 
html   
body   
h1The xxxx Hello Program/h1   
p   
Hello xxxx World!   
/body   
/html   
测试结果(只取了无以复加富有代表性的 Requests per second
即各级秒处理要数就等同桩)   
CGI/脚本类型 每秒处理要数 
C CGI  128   
Perl CGI  69   
mod_perl  223   
PHP  237   
JSP  21   
测试结论: 

除却JSP之外,其它几种CGI/脚本的表现大致是正常的。Perl程序解释实施,作为 
CGI运行时以得另外fork进程,所以最慢;mod_perl和PHP都直接当httpd内部运转脚本,省掉了fork的损耗,所以及早了很多;C程序虽然据应无比抢,但当CGI
运行时为是以fork而要性能大打折扣。至于JSP…我怀念是结果连无有所代表性。毕竟测试用机只发生192M内存,用top看看,一个JAVA就占有了11M。况且测试用机本身是千篇一律令Web
server,测试时还发好几十独httpd在跑无了不管怎么说,在配备于逊色的服务器上,跑PHP、mod_perl在性质达到要好过JSP是自然之。 
附测试用程序: 
C程序 hello.c   
#include stdio.h   
int main(void)   
{   
char s[] = “C CGI”;   
printf (“Content-Type: text/html “);   
printf (“html ”   
“body ”   
“h1The C CGI Hello Program/h1 ”   
“p ”   
“Hello %s World! ”   
“/body ”   
“/html “, s);   
return 0;   
}   
用 gcc -o hello hello.c 编译,把 hello 放到 cgi-bin目录下。 
Perl程序 hello.pl   
#!/usr/bin/perl   
#!/usr/bin/perl   
$s = “Perl CGI”;   
print “Content-Type: text/html “;   
print <<DONE   
html   
body   
h1The Perl CGI Hello Program/h1   
p   
Hello $s World!   
/body   
/html   
DONE   
把hello.pl放到cgi-bin目录下,兼作Perl CGI和mod_perl 脚本测试用。 
PHP文件 hello.php   
html   
body   
h1The PHP Hello Program/h1   
<? $s = “PHP”; ?>;   
p   
Hello <? echo $s ?>; World!   
/body   
/body   
/html   
JSP文件 hello.jsp   
html   
body   
h1The JSP Hello Program/h1   
p   
<% String s = “JSP”; %>;   
p   
Hello <%= s %>; World!   
/body   
/html

Java Servlet和JSP的技能概述以及比较

Java Servlet及其特色

Servlet是Java技术对CGI编程的应对。Servlet程序于劳动器端运行,动态地生成Web页面。与俗的CGI和成千上万其它类CGI的技艺对比,Java
Servlet具有更胜似的频率,更便于使,功能再强硬,具有更好的可移植性,更省去投资(更要之是,
Servlet程序员收入要较Perl程序员高:-):

高效:

当人情的CGI中,每个请求都使启动一个初的长河,如果CGI程序本身的施行时较短,启动进程所需要的出很可能反倒过实际执行时。而以Servlet中,每个请求由一个轻量级的Java线程处理(而休是重量级的操作系统进程)。

以风CGI中,如果出N个并发的指向同一CGI程序的请,则该CGI程序的代码在内存中又装载了N次;而对Servlet,处理要的凡N个线程,只需要同份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多之选,比如缓冲以前的测算结果,保持数据库老是的运动,等等。

方便:

Servlet提供了大量之实用工具例程,例如自动地剖析及解码HTML表单数据、读取和装HTTP头、处理Cookie、跟踪会话状态等。

功能强大:

每当Servlet中,许多施用传统CGI程序非常为难完成的职责还可以轻松地完成。例如,Servlet能够一直与Web服务器交互,而平常的CGI程序不能够。Servlet还能够在一一程序中共享数据,使得数据库连接池之类的功效异常易实现。

可移植性好:

Servlet用Java编写,Servlet API具有完善之正儿八经。因此,为I-Planet
Enterprise
Server写的Servlet无需另实质上之更改即可移植到Apache、Microsoft
IIS或者WebStar。几乎有的主流服务器都一直或经插件支持Servlet。

节投资:

不单有广大廉价甚至免费的Web服务器可供应个人还是稍微框框网站以,而且对现有的服务器,如果它不支持Servlet的言语,要加上这片效果为往往是免费之(或一味待极少的投资)。

JSP及其特性

JavaServer
Pages(JSP)是均等种植实现普通静态HTML和动态HTML混合编码的艺,有关JSP基础概念的征求参见《JSP技术简介
》。

重重由CGI程序生成的页面大部分依然是静态HTML,动态内容无非以页面被少的几乎单部分出现。但是连Servlet在内的绝大多数CGI技术及其变种,总是通过序生成整个页面。JSP使得我们可以独家创建这片单部分。例如,下面就是一个粗略的JSP页面:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>

<HTML>

<HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD>

<BODY>

<H1>欢迎</H1>

<SMALL>欢迎,

<!– 首赖走访的用户名字吧”New User” –>

<% out.println(Utils.getUserNameFromCookie(request)); %>

假设装帐号信息,请点击

<A
HREF=http://www.blue1000.com/article/"Account-Settings.HTML">这里</A></SMALL>

<P>

页面的别样内容。.

</BODY></HTML>

下面是JSP和其它类似或系技术之一个简易比较:

JSP和Active Server Pages(ASP)相比

Microsoft的ASP是如出一辙种植和JSP类似之技能。JSP和ASP相比有两面的长。首先,动态部分用Java编写,而未是VB
Script或任何Microsoft语言,不仅功效重新强劲又又便于使。第二,JSP应用可以移植到其它操作系统及非Microsoft的Web服务器上。

JSP和纯Servlet相比

JSP并没有长其它实质上不能够为此Servlet实现之效用。但是,在JSP中修静态HTML更加方便,不必再度用
println语句子来输出每一行HTML代码。更重要的凡,借助内容跟外观的诀别,页面制作中不同性质的职责可以便宜地分离:比如,由页面设计专家进行HTML设计,同时预留起供Servlet程序员插入动态内容之空间。

JSP和服务器端包含(Server-Side Include,SSI)相比

SSI是千篇一律种植被普遍支持的当静态HTML中引入外部代码的艺。JSP在这点的支持更加全面,因为她好据此Servlet而非是独立的程序来转动态内容。另外,SSI实际上不过用于简单的蕴藏,而休是面向那些会处理表单数据、访问数据库的“真正的”程序。

JSP和JavaScript相比

JavaScript能够当客户端动态地生成HTML。虽然JavaScript很有因此,但它只能处理为客户端环境为底蕴之动态消息。除了Cookie之外,HTTP状态及表单提交数据对JavaScript来说都是匪可用的。另外,由于是于客户端运行,JavaScript不可知顾服务器端资源,比如数据库、目录信息等等。

Java很占内存为?

以Java平台拓展嵌入式设备开支时,其对内在的使用量,会无会见比较采用原始语言如C/C++更要命来吧?这在软件之错综复杂。Java由于虚拟机和内库的原因,有或会见促成内存开销的增大。下面比较一下Java平台内存的占有情况(基于Sun的落实):

CLDC(Connected Limited Device
Configuration,运算功能有限、电力有限的嵌入式装置,如PDA
、手机等):可工作被100K(RAM),JIT(Just In
Time,即时编译技术)需要极度要命来。典型的配置要求500K-16M(RAM)。

CDC(Connected Device
Configuration,运算能力相对比完美、并恳请于电力供应上针锋相对比较充足的嵌入式装置,如冷气机、电冰箱等):VM约为250K,JIT小于300K,VM+JIT+基础类库约占2-2.5M。典型的配备要求:4M-32M。

自,内存的占用量还取决于应用之大小与内在的下情况。可以见到,其实Java平台不会见占用太死的内存。但是,这不过是问题之一半。另一半凡,Java代码最后安排时凡盖看似公事来安排之,它主要是包括字节码和首数据。通过对CVM数据的剖析,可以望,字节码占据着约30%的数据量。而动JIT编译的代码相对于字节码而言,可以窥见,内存的占有量增加了,并生一个7-8加倍之ARM指令集。由于,可以估计:

Java类改成字节码的进度≈1/30%≈3.3x;

原始语言转成为字节码的速≈7x。

随即象征,Java代码的内存使用量约为原始语言代码的一半。当然就才是老简单的估计,但可是理所当然的估量。

使Java的JIT后,只有那些使用效率高之代码才见面让编译。而当系面临只是是突发性吃实践之代码则运用解释来编译。同时,JIT尽量使受编译的代码其内存占有量保持在平较小之范围外。对CVM(CDC所用虚拟机),默认值为512K。而在部分比较出色之先后中,可以发现,其值为100K-300K。

旋即吗即,使用Java编写的主次,只有利用效率比较高的代码才促成内存占用的充实。相反,使用C/C++编写的程序,整个代码都急需开展编译。因此,不可知说采取Java语言编写的次占用的内存就会见于下C/C++编写的主次非常。这决定让软件相对于阳台代码的复杂度及大小。如果软件规模比较充分,Java平台所吃的外存远小于Java类文件简洁性节约的内存,这种情景下,使用Java平台将有益于节约内存。如果软件的圈较粗,则Java平台消耗的内存就比明确了,可以设想采用C/C++来开发,以省内存。