打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
移植APPWEB到ARM总结
 移植APPWEB到ARM总结 2012-11-28 15:56:55

分类: 系统运维

一、appweb简介:
Appweb是一个标准的嵌入式HTTP Web服务器,主要的设计思路是安全。这是直接集成到客户的应用和设备,便于开发和部署基于Web的应用程序和设备。它正迅速( 3500多要求每秒)和紧凑(从11万) ,其中包括支持动态网页制作,服务器端嵌入式脚本过程中的CGI ,可加载模块,的SSL ,摘要式身份验证,虚拟主机, Apache样式配置,日志记录,单和多线程应用程序。它提供了大量的文档和示例。
二、功能:
1、支持嵌入式JavaScript,esp,egi,cgi和php?。?
2、全支持HTTP/1.1的Web服务器
3、多线程,事件驱动的核心:在同类产品中最快的性能
4、动态可加载模块
5、服务器端JavaScript的Web框架
6、在内存中的PHP模块
7、CGI进程以及传统的CGI
8、与Apache兼容的配置和日志记录
9、基本和摘要式身份验证
10、安全套接字层(SSL/ TLS)
11、会话状态数据管理
12、HTTP客户端程序和库
13、ROM化(ROMable)网页文件和配置文件
14、跨平台和便携式
15、嵌入在应用程序和设备(支持XIP)
16、模块化提供的源代码和文档
三、移植方法:
1、解压:tar -xvzf appweb-3.3.4-0-src.tgz;
2、cd appweb-3.3.4;主要是对configure的配置;
3、参数众多,建立conf.sh shell脚本来实现:
#!/bin/sh
#设在交叉编译环境#
export AR=arm-linux-ar
export CC=arm-linux-gcc
export LD=arm-linux-ld
export NM=arm-linux-nm
export RANLIB=arm-linux-ranlib
export STRIP=arm-linux-strip
#开始配置#
./configure --build=i686-pc-linux \      #宿主机平台
 --host=arm-9260-linux \          #目标平台
 --type=RELEASE \              #发布类型(debug和release两种)
 --webdir=/var/www \               #网页文件存放目录
 --enable-multi-thread \          #允许多线程
 --disable-samples \
 --disable-test \
 --enable-auth \
 --enable-upload \
 --shared \                #动态编译
 --enable-cgi \
 --port=80 \                #监听端口,默认是7777
 --enable-egi \
 --enable-auto-compile \        #以下几个是ejs所需的参数
 --enable-cross-compiler \
 --enable-db \
 --number=int
4、source conf.sh 这步完成之后会有一个配置列表出来,可以查看是否是我们需要的配置。
5、make
6、如果make成功,在bin、lib、modules下面会有相应的arm-9260-linux目录,里面存放的就是我们
所需要的东西。
7、将arm-9260-linux里面的东西拷贝到设备板上运行即可。
8../appweb --config appweb.conf (我将所有与appweb相关的文件放在一个目录下面的)

关于配置文件appweb.conf
拷贝appweb-3.3.4/src/server/template/standard/appweb.conf进行修改即可。
主要修改的地方:
0、include conf/log.conf  //是指定appweb日志文件,更加实际情况修改ErrorLog的位置。
1、ServerRoot "/root/appweb/"  //假如我的appweb文件放在了/root/appweb下面;
2、Listen 80   //默认是7777,如果不该访问的时候需要“ipaddress:7777”进行访问;
3、DocumentRoot "/var/www"  //浏览器访问目录;
4、DirectoryIndex index.html   //主页
5、LoadModulePath "/root/appweb/modules" //appweb加载模块存放位置,根据实际情况自己设定。
6、Group root   //用户组
7、User root    //用户
其他的保持不变即可。conf目录在src/server/template/standard/conf拷贝即可。

四、资源占用:
内存:
Mem: 12204K used, 49352K free, 0K shrd, 0K buff, 4952K cached
CPU:  0.5% usr  6.3% sys  0.0% nic 93.0% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 0.21 0.13 0.08 1/37 9451
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
 5949  1503 root     R     3240  5.2   0  0.5 top
 5941  1503 root     S     4968  8.0   0  0.0 ./appweb --config appweb.conf
 1043  1038 root     S     4340  7.0   0  0.0 /opt/bin/snmpd -f -c /opt/snmpd.conf
 1056     1 root     S     3240  5.2   0  0.0 /usr/sbin/telnetd
开到10个网页连接:
Mem: 12292K used, 49264K free, 0K shrd, 0K buff, 4952K cached
CPU:  2.9% usr  7.1% sys  0.0% nic 89.8% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 0.02 0.08 0.07 1/39 9868
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
 9692  1503 root     R     3240  5.2   0  0.5 top
 5941  1503 root     S     5100  8.2   0  0.0 ./appweb --config appweb.conf
 1043  1038 root     S     4340  7.0   0  0.0 /opt/bin/snmpd -f -c /opt/snmpd.conf
 1056     1 root     S     3240  5.2   0  0.0 /usr/sbin/telnetd
flash:
bin:
-rwxr-xr-x    1 root     root         14779 Nov 28  2012 ajs
-rwxr-xr-x    1 root     root         11233 Nov 28  2012 ajsc
-rwxr-xr-x    1 root     root         66245 Nov 28  2012 ajsweb
-rwxr-xr-x    1 root     root         14933 Nov 28  2012 angel
-rwxr-xr-x    1 root     root         12872 Nov 28  2012 appweb
-rw-r--r--    1 root     root          5826 Jan  1 00:07 appweb.conf
-rwxr-xr-x    1 root     root        209004 Nov 28  2012 cgiProgram
-rw-r--r--    1 root     root          2756 Jan  1 00:43 mime.types
conf:
-rw-r--r--    1 root     root           103 Nov 28  2012 doc.conf
drwxr-xr-x    2 root     root           400 Jan  1 00:05 hosts
-rw-r--r--    1 root     root          1203 Jan  1 00:10 log.conf
drwxr-xr-x    2 root     root           592 Jan  1 00:05 modules
-rw-r--r--    1 root     root          1874 Jun  8  2011 tune.conf
lib:
-rwxr-xr-x    1 root     root        142816 Nov 28  2012 libac.so
-rwxr-xr-x    1 root     root        303928 Nov 28  2012 libajs.so
-rwxr-xr-x    1 root     root        112436 Nov 28  2012 libappweb.so
-rwxr-xr-x    1 root     root        188944 Nov 28  2012 libmpr.so
-rwxr-xr-x    1 root     root         95916 Nov 28  2012 libpcre.so
-rwxr-xr-x    1 root     root        349844 Nov 28  2012 libsqlite3.so
modules:
-rw-r--r--    1 root     root         84182 Nov 28  2012 ajs.mod
-rw-r--r--    1 root     root         30326 Nov 28  2012 ajsweb.mod
-rwxr-xr-x    1 root     root         10524 Nov 28  2012 mod_auth.so
-rwxr-xr-x    1 root     root         15440 Nov 28  2012 mod_cgi.so
-rwxr-xr-x    1 root     root          6340 Nov 28  2012 mod_chunk.so
-rwxr-xr-x    1 root     root         12764 Nov 28  2012 mod_dir.so
-rwxr-xr-x    1 root     root          4240 Nov 28  2012 mod_egi.so
-rwxr-xr-x    1 root     root         19116 Nov 28  2012 mod_ejs.so
-rwxr-xr-x    1 root     root          7716 Nov 28  2012 mod_file.so
-rwxr-xr-x    1 root     root          6188 Nov 28  2012 mod_range.so
-rwxr-xr-x    1 root     root         10496 Nov 28  2012 mod_upload.so
www:
-rw-r--r--    1 root     root          2978 Jan  1 00:12 index.ejs
-rw-r--r--    1 root     root            83 Jan  1 00:45 index.html
-rw-r--r--    1 root     root          1824 Jan  1 00:27 index.mod

共计:2.1M;




============================================================================



分类: 系统运维

服务器端:simpleModule.c
#include
#include
#include "/usr/lib/appweb/inc/appweb.h"
#include "/usr/lib/appweb/inc/ejs.h"

EjsVar *MyFunction(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
{
        int i = 1;
        if ( i == 1) {
        ejsWrite(ejs, "

Hello Linux

");
        }
        else{
        ejsWrite(ejs, "

Hello World

");
        }
        return 0;
}

MprModule *maSimpleModuleInit(MaHttp *http)
{
        MprModule   *module;
        Ejs *ejs;
        /**
        *创建Module  
        *simpleModule为模块的名字
        *3.3.4为appweb版本号
        **/
        module = mprCreateModule(http, "simpleModule", "3.3.4", NULL, NULL, NULL);
        if (module == 0)
            return 0;
        ejs = ejsGetMaster(http);
        //绑定自己的C函数  
        ejsDefineGlobalFunction(ejs, "myTest", MyFunction);
            return module;
这里两个重点:
1、创建模块mprCreateModule(),模块的名字必须是独一无二的;
2、绑定c函数ejsDefineGlobalFunction();访问的时候通过绑定后的函数名访问c函数,即myTest();
编译生成动态库:gcc simpleModule.c -fPIC -shared -o mod_test.so -L /usr/lib/appweb/lib -lappweb -lajs
将动态库拷贝到/usr/lib/appweb/modules目录下面(该目录是appweb.conf配置文件指定搜索路径)
在appweb里面添加模块加载:(这一步还是很重要的)在appweb.conf的ejs模块加载后填上这句
LoadModule simpleModule mod_test
simpleModule:就是我们的模块名字
mod_test:是动态库的名字

客户端:hello.ejs:

welcome to appweb ejs:<% myTest() %>

 
这样建立的hello.ejs不能直接使用,需要经过编译
ajsweb hello.ejs
出现[BUILD]: hello.ejs代表编译成功,相应的会有hello.mod生成(这个mod文件的生成困扰了我一段时间。。。)
运行appweb --config /etc/appweb/appweb.conf
在浏览器输入127.0.0.1/hello.ejs即可看到结果:

welcome to appweb ejs:

Hello Linux


OK!




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
appweb动态加载自定义模块文件
FastDFS分布式文件系统安装与使用(单节点)
Linux环境下安装 zookeeper
linux下appweb+ejscript+netsnmp开发web应用
基于Twemproxy的Redis集群方案
电信烽火光猫 HG2821T
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服