基于Boa 嵌入式Web服务器的应用研究

2018-09-22 04:15黄雅菁上海市贸易学校计算机教研部
数码世界 2018年8期
关键词:描述符多用户浏览器

黄雅菁 上海市贸易学校计算机教研部

1 嵌入式Web服务器概述

嵌入式系统以其可裁剪、可靠性和高性价比赢得了市场青睐,可接入Internet的嵌入式设备使得未来的生活更加自动化,智能化和人性化。在嵌入式设备的管理与交互中,客户端可以通过Web浏览器对嵌入式设备进行管理和监控。嵌入式Web服务器(EWS ,Embedded Web Server)是专门针对嵌入式设备设计,目的是在于扩展式设备功能,为远程监控提供有力支持,使传统的测试和控制设备转变为具备了以TCP/IP为底层通信协议,Web技术为核心的基于互联网的网络测试和控制设备。

2 现有的嵌入式WEB 服务器

目前,常用的Web服务器,有GoAhead、thttdpd和Boa。

GoAhead Web服务器是开源的,体积小,性能高,支持需要在基于浏览器管理模式的设备上传递动态信息。同时,GoAhead Web服务器支持多种操作系统和开发平台,具有很强的可移植性。缺点是对ASP的支持意味着要依靠微软平台,在安全方面的没有过多的考虑。

Thttpd服务器代码少,占用内存少,缺点是只能运行在类Linux操作系统上,对所有文件都是一次读取完毕,同时缓存下来,因此在运行过程中占用资源多。

Boa是单任务的Web服务器,通过建立 HTTP 请求列表来处理多路 HTTP 连接请求,只为 CGI 程序创建新的进程,占用资源少。同时它还具有自动生成目录、自动解压文件等功能,具有很高的HTTP 请求处理速度和效率。

表一 几种嵌入式WEB服务器性能比较

由表一可见,对于程序性能指标没有很高要求的需求,建议选择轻量级的Thttpd;对于安全性没有很高要求而且对跨平台要求的需求,建议采用GoAhead;对于安全性和软件性能指标有高要求的需求,建议采用Boa。相比较而言,Boa的功能强,速度快,安全性高,占用资源少,适合资源相对有限的嵌入式系统。

3 Boa Web服务器在车辆检测系统的应用

3.1 Boa的原理

在嵌入式Web 服务器的设计方法中,多进程并发结构为了响应客户机的请求创建多个进程,而创建子进程会占用系统较多的资源。Boa Web服务器中的多路复用I/O模型解决了多进程并发结构中创建子进程带来的系统资源消耗问题。它允许把进程本身挂起来,而同时使系统内核监听所要求的一组文件描述符的任何活动,主要确认在任何被监控的文件描述符上出现活动,select()调用将返回指示该文件描述符已准备好的消息,从而实现了为进程选出随机的变化,而不必由进程本身对输入进行测试而浪费CPU开销。文件描述符有两种工作方式:阻塞与非阻塞。阻塞方式是指,当试图对该文件描述符进行读写时,如果当时没有东西可读或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止。非阻塞方式是指,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待。使用select判断一组文件描述符中是否有一个可读或可写,如果没有就阻塞,直到有一个的时候就被唤醒。只要设置好select的各个参数,那么当文件可以读写的时候select会“通知”。select模式服务器端构架如下:

多路复用I/O解决了多进程并发结构中创建子进程带来的资源问题,此模型实际上是将UDP循环模型用在了TCP上面。这也会带来一些问题,如由于服务器依次处理客户的请求,所以可能导致有的客户会等待很久,多线程并发结构的代价很小,但另一方面由于线程间共享内存,增加了编程的复杂性。

3.2 系统需求分析

本次主要利用嵌入式Web服务器完成车辆检测系统的远程查看和设置工作。原则上要方便管理人员对系统的管理和维护,并且满足对数据的高效管理,保证用户通过浏览器将配置信息下发,并将需要查看的数据及时迅速的显示给用户,所有的数据结果存储在本地配置文件中,当客户端使用Web浏览器访问嵌入式Web服务器时,需要进行身份验证,以确保系统的安全性和防止非法用户的访问。

3.3 移植和配置Boa

3.3.1 移植 Boa

建立Boa服务器的安装配置步骤如下:

(1)下载boa源代码。boa Web服务器的源代码可以从http://www.boa.org下载。我们采用的是 boa-0.94.13 这个版本,下载然后解压缩。

# tar zxvf boa-0.94.13.tar.gz

将其重命名为boa。

(2)安装并编译boa源代码。我们将boa源代码解压到/home目录下,编译安装源:

#cd /home/boa/src

在安装之前我们需要设置boa安装的主目录

# cd src

在 src/defines.h中添加

# define SERVER_ROOT “/home/boa”

然后编译

#./configure

修改Makefile文件

找到CC=gcc,将其改成CC = arm-linux-gcc,

找到CPP = gcc E,将其改成CPP = arm-linux-gcc E,

并保存退出。

然后运行make进行编译,得到的可执行程序为boa,将调试信息剥去,得到的最后

程序只有约60KB大小。

# make

# arm-linux-strip boa

在boa/src目录下将生成boa文件,该文件即为Boa服务器执行文件。

3.3.2 配置 Boa 服务器

boa启动时将加载一个配置文件boa.conf,在boa程序运行前,必须首先编辑该文件,并将其放置于src/defines.h文件中SERVER_ROOT宏定义所定义的缺省目录,或者在启动boa时使用参数“-c”指定boa.conf的加载目录。

将User root 改为User nobody

将Group root 改为Group 0

将DocumentRoot/var/www 改为DocumentRoot/home/boa

将 MimeTypes/etc/mime.types 改 为 MimeTypes /home/boa/mime.types

将ScriptAlias /cgi-bin/ 改为/home/boa/cgi-bin/

将 ScriptAlias /index.html/ 改 为 /home/boa/index.html/

用户可以根据自己需要,对 boa.conf 进行修改,但必须要保证其他的辅助文件和设置必须和 boa.conf 里的配置相符,不然 Boa就不能正常工作。将所有的.cgi文件拷贝到/home/boa/cgi-bin/目录下,将所有 HTML 文件拷贝到/home/boa/html文件夹下面,将 boa.conf 拷贝到/home/boa 下面。CGI 脚本测试很容易发生权限不够的问题,要保证 Boa 访问的主目录、CGI脚本目录以及临时文件目录(如果没有设置 TMP 环境变量时,缺省值是/tmp 目录)都必须能被 Boa 运行时所代表的用户完全访问,该用户由 boa.conf 中的 user指出。

3.3.3 测试 Boa 服务器

测试 Boa 能否正常工作,静态 HTML 页面能否正常访问,CGI 脚本能否正常运行。index.html为测试主页面,images为存放各种图片的子目录,cgi-bin为CGI脚本的存放目录。根据boa.conf的配置,目前HTML文档的主目录为/home/html,CGI脚本目录为/home/boa/cgi-bin。在PC机上运行浏览器进行测试,在地址栏输入目标系统 IP,即 http://10.24.1.121,可以看到相关页面,表示静态HTML页面测试通过。

3.4 软件实现基本原理

根据需求我们主要是用Web对嵌入式停车检测系统中的数据进行远程的设置和查看,管理员通过浏览器选择要设置查看底层车辆信息采集器收集的的车辆信息,通过HTML表单将所选内容提交给CGI程序,CGI脚本获取用户发的信息并解码,然后执行相应的数据库程序,通过约定的路径访问数据库,并将访问结果通过HTML送回给用户端浏览器。

3.5 系统验证

在测试规范和目的明确的情况下,设计了测试方案,根据选择的测试用例对系统功

能以及稳定性、可靠性进行了测试和分析。本次测试计划为嵌入式Web服务器功能测试。其具体内容为:通过嵌入式Web服务器是否能实现对嵌入式车辆检测系统进行远程管理,即完成远程用户对信息的的访问查询与设置等功能。

(1)车位实时上报状态:

a) 占用情况 正确

b) 在线情况 正确

c) 电量报警 正确

d) 通信超时报警 正确

(2)车位信息查询

e) 占用情况 正确

f) 在线情况 正确

g) 电量情况 正确

h) 通信超时报警 正确

(3)车位信息配置

i) 上报周期 正确

j) 报警周期 正确

k) 网络参数 正确

测试表明该系统具有界面友好、低成本、设计简单、操作方便等优点,完全满足对嵌入式车辆检测系统远程设置和查看的要求。

4 总结与展望

本文主要对比了几种现有的嵌入式Web服务器,将Boa Web服务器应用到车辆检测系统,基本实现了通过客户端来远程监控车辆信息的功能。我们使用了开源的Boa Web Server,在使用的过程中也发现Boa的不足,我们可以通过采用以下措施来提高系统性能,以此作为未来改进Web服务器的方法:

(1)减小Web服务器中请求的生命周期。

请求的生命周期指的是当Web服务器收到客户的一个HTTP请求并发出所请求的文件之前,Web服务器必须执行一系列指令。请求的生命周期直接影响到服务器的响应时间。所以将系统调用和其他处理开销最小化是十分重要,可以通过减少文件缓存来达到。

(2)采用瘦服务器、胖客户机的应用模式。

胖客户端模式意味着在应用结构上相当数量的应用逻辑都在客户端执行。不产生与服务器往返通信的过程,减少了网络通信量、延迟等,减少了Web服务器的负担。

(3)增加多用户认证

目前的Boa是单用户机制,对于多用户不支持,这样限制了多用户的访问和管理,我们可以引入多用户认证机制,既实现了多用户登录的基本需求,也可以增加安全性。

猜你喜欢
描述符多用户浏览器
基于AKAZE的BOLD掩码描述符的匹配算法的研究
欧洲共同语言参考标准在中国高校学术英语写作教学适用性的研究:可理解性,可行性和有用性
微软发布新Edge浏览器预览版下载换装Chrome内核
反浏览器指纹追踪
基于深度学习的局部描述符
河北省南水北调中线受水区水资源统一调配方案研究
基于SVM的化合物分类综述
一种基于LBS的多用户位置共享方法MULS
VBA实现SE的多用户记录
浏览器