微信关注,获取更多

嵌入式Web服务器搭建指南及常见类型(含NGINX)与应用场景

把 web 服务器移植于嵌入式系统的服务器,便是嵌入式 web 服务器。它依旧基于 http 文本协议来通信,有着标准的接口形式,对客户端而言,访问嵌入式 web 服务器跟访问普通的 web 服务并无二致。

嵌入式系统web服务器_嵌入式web服务器_OpenWrt应用

在实际工作当中,我们存在于板子之上搭建 web 服务器的情况,这给我们的调试带去了些许便利,能够借由网页跟板子开展交互,即便板子处于没有显示屏的状况下,也可当作一种方案用以进行功能展示。

一、核心约束

嵌入式环境与服务器环境不同,嵌入式设备有三个硬性约束:

受到限制的维度,具有代表性的指标,内存范围是8MB至128MB,CPU的范围是100MHz至1GHz,存储的范围是4MB至32MB的Flash。

“功能全面 + 可扩展性”,这是传统服务器所秉持的设计哲学,而嵌入式服务器所追求的则是“够用 + 极致精简”,是这样的情况。

二、常见嵌入式 Web 服务器2.1 NGINX

NGINX是服务器端王者,嵌入式场景能用吗?

有不少人觉得,NGINX仅仅是适配服务器用的,不过,事实上,在高性能的嵌入式设备里,像智能网关、边缘计算盒子这类,它有着出色的表现,而且,它还适用于类似Cortex – A53/A72的中高端嵌入式设备。

http://nginx.org/download/nginx-1.24.0.tar.gz

就NGINX而言,它依赖于pthread、zlib等这类库,要是嵌入式系统并没有预先安装,那就需要手动去进行移植。

Nginx 通过采用“master 进程 + worker 进程 + 事件驱动”这种模型,其并发能力相较于 Boa 而言要远远地更为强大,不过在资源开销方面同样也会更大一些。

嵌入式web服务器_OpenWrt应用_嵌入式系统web服务器

嵌入式裁剪编译:

裁剪版:~350KB

嵌入式web服务器_嵌入式系统web服务器_OpenWrt应用

内存占用优化配置:

OpenWrt应用_嵌入式web服务器_嵌入式系统web服务器

2.2 Boa

Boa是那种单进程具备高性能特征的“资深者”,它是属于老牌的单线程异步Web服务器,过去曾是嵌入式领域的“标准配置”,其核心优势在于无比小巧(编译之后仅仅只有几十KB),然而早就已经停止进行维护了(最后的版本停留在2005年)。

http://www.boa.org/

Boa运用“单进程 + 非阻塞I/O + 事件驱动”模式,将其喻为“一个服务员同时招待多个顾客,仅处理有需求的顾客,并非一直等候”,然而因属单线程,在高并发状况下会出现响应延迟。

OpenWrt应用_嵌入式系统web服务器_嵌入式web服务器

使用boa需要配置boa.conf文件,最简配置如:

echo "Port 80
User 0
Group 0
DocumentRoot /var/www
ServerName EmbeddedBoa
CGIPath /bin:/usr/bin:/sbin:/usr/sbin" > boa.conf

设计一个简单的网页如:

嵌入式系统web服务器_OpenWrt应用_嵌入式web服务器

嵌入式设备上启动boa服务:

OpenWrt应用_嵌入式web服务器_嵌入式系统web服务器

boa进程启动成功之后,于浏览器里输入我们开发板的IP地址,便能够访问到index.html网页。

嵌入式系统web服务器_OpenWrt应用_嵌入式web服务器

boa适用场景:

不适用的场景:

2.3 Thttpd

Thttpd,它属于那种单进程多线程(其线程部分为可选)的轻量级服务器,它的核心优势在于,静态页面处理速度特别快,而且资源占用很低(编译之后大概是~100KB),它还支持虚拟主机以及URL重写,当前仍有少量的社区在对其予以维护。

https://www.oschina.net/p/thttpd?hmsr=aladdin1e1

独到之处:

局限:

对动态 CGI 支持较弱,不支持 HTTPS。

2.4 Mini_httpd

Mini_httpd,它属于超轻量级服务器,编译之后仅仅只有~50KB,它支持CGI,它支持SSI,它支持HTTPS,且是集成OpenSSL的那种,它代码量少,仅仅只有几千行,它易于修改,它易于移植,它适合资源极度受限下的场景。

这是一个网址链接 https://www.oschina.net/p/mini-httpd。

# 典型配置
./mini_httpd -p 8080 -d /www -c "**.cgi" -u root

对比 Thttpd:

特性,Thttpd,二进制大小约为 120KB,Mini_httpd,其二进制大小约为 80KB,内存占用方面,Thttpd,其内存占用约为 800KB,Mini_httpd,其内存占用约为 600KB,HTTPS 支持情况,Thttpd,支持,Mini_httpd,也支持。

2.5 Lighttpd

Lighttpd,也就是被称作“小灯”的那个,它是基于事件驱动的轻量级服务器,其核心优势乃是功能全面加上资源适中,编译之后大概是200KB,它支持CGI,支持FastCGI,支持HTTPS,支持gzip压缩,同时社区活跃度还很高。

http://www.lighttpd.net/

主要特性:

Lighttpd跟Nginx它们的设计哲学类似,是那种事件驱动、高性能以及低消耗这样的,所以常常被拿来作比较,Lighttpd好似一个专注的“特种兵”,在它所擅长的那些领域,也就是高并发连接、低资源消耗方面极其出色,而Nginx则更像是一个功能全面的“多面手”,适用性要更广一些。

嵌入式web服务器_OpenWrt应用_嵌入式系统web服务器

适用场景:

像网络摄像头的管理界面这类,需要 PHP 支持的复杂 Web 应用,以及需要 Python 支持的复杂 Web 应用。

配置示例:

嵌入式系统web服务器_嵌入式web服务器_OpenWrt应用

2.6 Appweb

Appweb,一款专门针对嵌入式所设计的工业级服务器,它能够支持 HTTP/2,也能支持 HTTPS,还支持 WebSocket 以及 RESTful API,其核心优势在于具备高稳定性,同时又有着很强的适配性,不过部分功能是需要商业授权的,开源版对于嵌入式基础使用而言是足够的。

核心优势:

ESP 示例(动态生成设备状态页面):

嵌入式web服务器_嵌入式系统web服务器_OpenWrt应用

适用场景:

三、对比3.1 资源占用对比

OpenWrt应用_嵌入式web服务器_嵌入式系统web服务器

3.2 功能特性对比

嵌入式系统web服务器_嵌入式web服务器_OpenWrt应用

3.3 决策树

嵌入式web服务器_嵌入式系统web服务器_OpenWrt应用

未经允许不得转载:openwrt技术分享 » 嵌入式Web服务器搭建指南及常见类型(含NGINX)与应用场景

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏