1——嵌入式WebServer的移植——boa&&appweb学习1

项目做到现在这个阶段,是时候引入http服务器了。以前的团队移植过boa作为http服务器,一方面给网页使用,另一方面给其他在http之上封装的协议使用。什么协议是加挂在http里面的呢,这里就不说了,我们业内覆盖范围最广的协议就是在http的body里面开发的,那不是本文重点。

当时移植boa我不在,没怎么参与,只是后续的工作中偶尔遇到问题会看看boa移植的代码,所以对boa我也不是非常熟悉,只知道维护了几个链表作为消息队列,按照一定顺序去处理,用select实现的网络触发。里面的逻辑非常的复杂,分段读取分段分析。真大神的代码一般都是这样的。

这次移植我上网查了一些资料,大家也都能看到。最终我把目标放在了boaappweb上,原因就是关于它们的资料比较多。boa我用过为什么没直接选它呢?我下面贴上一张图大家就明白为什么加上appweb了。

看到appweb的用户列表后你有理由忽略它吗?EmbedThis敢说appweb是当今世界上最快的嵌入式网络服务器真的得做的差不多。这么活跃的一个服务器,真的需要考虑。boa在2005年就已经停止了维护,对很多appweb官网上提到的功能我想boa应该是做不到的。例如今天看到的html5特有的WebSocket,boa肯定就做不到,新版本的http,新的加密,boa应该也做不到。但是面对嵌入式网络服务器,二者都能满足,因为嵌入式网络服务器的主要功能是最基本的简单发送接收,只是为了方便对设备的一些配合和观察使用。这是boa的说明网站:http://www.boa.org/documentation/boa-1.html#ss1.1 这是appweb的使用网站:https://www.embedthis.com/appweb/doc/users/features.html 如果想看二者的详细说明,可以看一下,说的比我说的好。

二者的源码都可以在上面的网站上找到,boa直接选择最新的版本,也就是2005年最后的版本:boa-0.94.13,appweb我选择的是最新的发布版本7.X:appweb-7.X。下面要开始真正的落到实处的去比较。做了很多的尝试,有的现在看是弯路,这些都跳过,直接说自己的看法。先撤一句别的,以后再用开源项目,我肯定会先看*readme*

嵌入式最关心的首先就是大小。二者源文件大小差异巨大,boa只有436K,仅仅appweb就有44.2M,更不用说一定要有的配套工程makeme-1.0.1和pak-1.0.1了,这两个各自又都是40M。要知道appweb的使用是需要配合makeme和pak的,这两个也都是EmbedThis开发的配套工程,方便网络服务器的开发,真的是方便了非常多。appweb里面有很多的例子来表现它强大的功能。很直接,源文件差异巨大,但这不足以说明问题,因为我们最终要的是可执行的elf文件。boa在debug模式下直接编译出是342K,strip之后是80K,如果裁剪还会更小,真的可以做到60K一下。配置boa.conf,就可以在浏览器上访问了,如下图这样。

jQuery完全可以网页,没有问题,放心,boa完全hold住了。我用交叉编译文件大小基本一致。关于boa.conf的内容这里就不做详细说明了,非常好理解。

appweb比boa要复杂很多,这是在我走了一圈后发现了。appweb在ubantu和arm上都能启动http服务,但是之后我不知道怎么去处理index.html!最后只能踏实下来去看官网和各个*readme*,不看真的不懂,在build里会编译出来很多可执行程序。

上图是在bin文件夹里的内容,看看有几个能够执行的吧。file一下发现很多,appman、appweb、appweb-esp、authpass、http和makerom。一脸懵逼,即使你./appweb listen 192.168.1.8:80启动了http服务,那又有什么用!老实回去看*readme*们吧。配置文件得提一下,名字叫做appweb.conf,配置文件的开头也需要仔细看。下面我粘贴出来一个。

这个文件的路径是src/server/appweb.conf,如果find一下的话会发现有更多的appweb.conf在sample和test文件夹里面。这个时候如果你读一下根目录下的README.md就会明白了,我贴出来那一段话。

按我现在做过几个尝试后来看,这句话就是说,我提供了很多的sample,你跳转到那个sample文件夹,启动appweb服务的时候,程序就会加载哪个文件夹下的appweb.conf作为启动配置。事实就是这样的。

当我仔细的看了几个配置文件和*readme*后,我发现单单编译一个appweb是不可行的,这样可能无法去通过浏览器登陆。需要下载并安装makeme和pak工程。就连appweb最好也是install一下,先make,再make install,把appweb指令安装到系统里面。makeme和pak直接安装对应的README.md去操作即可。

都执行完之后就可以去appweb里面的sample文件夹看看各种各样的例子了。我也没试完,今天只试了websocket的3个。

作为一个眼界局限于嵌入式linux应用层开发的我来说,第一眼我就相中了带echo字段的那个文件夹。谁知道这是最新潮的一个,我不知道是幸运还是不幸(哈哈)。说明里说的明确,就是回显而至,就是下图这种效果。

chrome根据html中WebSocket函数连接我的appweb,然后发送“这就是html5所特有的Webocket吗?”字符串,appweb收到后回复“没错! 这就是html5所特有的Webocket!”就这么一个简单的功能。最开始只有第一行,后面这个交互是实现不了的,最后组长一起帮忙解决的。看控制台,以前只是知道,但没怎么用过。之所以无法实现是因为js的src指定的网址是google的,无法访问,获取不到,最后给换成了国内的,也就解决了。

上图是websockets-chat实现的功能,群发。websockets-output是读文件里的内容发送。这个东西挺厉害哈。里面的原理我暂时还不太懂,不知道socket是怎么来回发的,万变不离我们linux这个宗。

后续还得继续研究appweb的大小还不好说,因为我还不知道怎么个启动方式。它是一种非常巧妙灵活的方式,这一点你如果跑过几个sample之后就会体会到。我之前没有见到过。简单看gcc的appweb这个文件是64K,交叉编译后是942K,appweb没有strip,交叉编译已经strip。这个还没有到最后定论。

时间仓促,先写到这里。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值