嵌入式設備web服務器
操作系統: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