首页 > 系统 > Android > 正文

Android系统中web服务器的实现

2019-11-09 18:10:21
字体:
来源:转载
供稿:网友

Android web服务器实现

2017/1/20 16:36:26

1 嵌入式设备web服务器介绍

目前,在嵌入式设备中所使用的web服务器主要有:Boa、thttpd、lighttpd、appweb、apache等。下图是从网上下载的对这些web服务器的详解和对比。 Boa是一种嵌入式设备所用的web服务器,它运行于linux和Unix下。它相较于其他web服务器,最大的区别就是他是一个单任务http服务器,它不像传统的web服务器那样为每个访问连接开启一个进程。Boa只能依次完成用户的请求,而不会fork()出新的进程来处理并发连接请求。但是Boa支持CGI(公共网关接口),能够为CGI程序fork()出一个进程来执行。出于Boa的设计目标就是速度和安全,以及它的单任务工作模式,令Boa在同等硬件条件下拥有更快的响应速度。

2 源码下载

下载网址:http://www.boa.org/版本:0.94.13(0.95版本之后,Boa不再开源发布)

3 交叉编译

编译环境:Ubuntu-Server 16.04 LTS 32bit 目标平台:Android

3.1 编译前准备

编译主机安装arm-linux-androideabi-gcc编译器,并确保编译器加到环境变量中。由于下载的boa源码使用的是yacc和lex作为语法和词法分析器,而目前已经弃用,Ubuntu用的语法和词法分析器是bison和flex,所以还需要安装bison和flex。

3.2 编译及处理报错

解包boa并进入boa-094.13/src目录,执行./configure,生成Makefile文件。开始编译:make。make: yacc:Command not foundmake: lex:Command not found 这是在编译前没有做3.1的步骤。如果还是出现,那么修改Makefile文件如下。同时修改了gcc和g++编译器。
 ...... 27 # Change these if necessary 28 29 YACC = yacc 30 LEX = lex 31 CC = arm-linux-androideabi-gcc 32 CPP = arm-linux-androideabi-gcc -E ......ii: gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c util.c: 100:1: error: pasting “t” and “->” does not give a valid PReprocessing token make: * [util.o] Error 1 修改src/compat.h如下。
......119 #ifdef HAVE_TM_GMTOFF120 #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff121 #else122 #define TIMEZONE_OFFSET(foo) timezone123 #endif......error_log: error:icky Linux kernel bug!。 这个error要在后面运行boa时在error_log中才能看到。修改src/boa.c如下。
......225 if (setuid(0) != -1) {226 //DIE("icky Linux kernel bug!");227 }......

4 boa配置

4.1 boa.conf文件

在boa-094.13目录下,有boa.conf示例配置文件,我们在其基础上更改,以便更符合我们的配置。下面对配置项做一个介绍。

Port 80 web端口,默认80,如果被占用,会报错,可以更改为其他可用端口,不过在访问时需指定端口。User nobody ——> User 0Group nogroup ——> Group 0 访问连接时所用的用户名和组名,网上都是设为0,即root账户。应该也可以设置为已存在的用户和其对应的组名,不过,可能会牵涉到相关文件权限的问题。ErrorLog /var/log/boa/error_log ——> ErrorLog /etc/boa/error_logaccessLog /var/log/boa/access_log ——> AccessLog /etc/boa/access_log 这是两个日志文件,我们可以自己设置对应的位置,注意更改此boa目录及其子目录下的所有文件的权限为777。DocumentRoot /var/www ——> DocumentRoot /etc/boa/html 存放html文件的地方。DirectoryIndex index.html 第一张页面的名称:index.html。MimeTypes /etc/mime.types ——> MimeTypes /etc/boa/mime.types mime.types文件位置,可以从编译机器上拷贝至/etc/boa/。ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ ——> ScriptAlias /cgi-bin/ /etc/boa/cgi-bin/ CGI程序目录。

4.2 Android系统上配置

根据boa.conf文件,配置boa服务器。

在/etc/下新建boa/目录。更改目录及子目录权限为777。

ll /etc/boa/ drwxrwxrwx 4 root root 4096 Jan 21 13:48 ./ drwxrwxrwx 3 root root 4096 Jan 19 15:17 ../ -rwxrwxrwx 1 root root 0 Jan 19 15:22 access_log* -rwxrwxrwx 1 root root 7350 Jan 19 15:31 boa.conf* drwxrwxrwx 2 root root 4096 Jan 19 16:52 cgi-bin/ -rwxrwxrwx 1 root root 0 Jan 19 15:22 error_log* drwxrwxrwx 2 root root 4096 Jan 19 15:55 html/ -rwxrwxrwx 1 root root 24241 Jan 19 15:11 mime.types*

将make源码生成的boa可执行程序push到Android系统的/system/bin/目录,修改权限为777。

简单找一个index.html放在/etc/boa/html/下,或者写一段简单的CGI程序,放在/etc/boa/cgi-bin/下。 执行boa程序,可以用top命令确认是否开启,如果没有启动,可以查看error_log,查找报错原因。

5 验证boa服务

Android手机启动boa服务后,打开手机热点,假如你的手机热点的ip为192.168.43.1,port为80,则使用另一台终端,连接其热点,浏览器输入 http://192.168.43.1/ ,就可以看到你的index.html显示在浏览器上。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表