简单介绍:
lua是一个小巧的脚本语言,专用于嵌入和扩展。它和C/C++代码有着良好
的交互能力。由于体积小,很适合嵌入到其他程序中为程序提供脚本功能。
lua在大多数平台上都可以顺利编译、运行。网址 外链网址已屏蔽www.lua.org
shttpd是一个小巧的web服务器,小巧到只有一个.c文件,4000余行代码。
虽然体积很小,却具备了最基本的功能,比如CGI。它既可以独立运行,
也可以嵌入到其他的应用程序当中。shttpd在大多数平台上都可以顺利
编译、运行。网址
应用方式:
很多设备都提供Web服务用于配置,比如路由器,ADSL猫等等。这种设备所
提供的web服务的典型用例是用户填写一些参数,提交给Web服务器,Web服务器
将这些参数写入硬件,并将操作结果或者其他信息生成页面返回给浏览器。
如果使用Apache,PHP,MySQL这种组合,一方面资源未必能承受,另一方面这些
硬 件所使用的操作系统也未必能支持这些软件(如pSOS,VxWorks,WinCE)。
如果shttpd和lua结合起来,一个用来提供基本的web服务,另一个用来编写
CGI脚本,应该是一个很不错的选择。他们都具备体积小,占用资源少的特点,
又都宣称源码级可移植。如果有更高的需要,也可以把sqlite加入,提供数据
库服务(sqlite是一个嵌入式的数据库,同样体积小巧,并且可以在很多平台
上工作)。不带sqlite,体积仅仅300k,加上sqlite大约500k,对于嵌入式应
用非常合适。
向WinCE移植:
虽然lua使用的是比ANSI还要小的clean C,并且号称在所有平台上不用修改
任何东西就可以直接make成功,但是WinCE却是一个例外。事实上,对大多数
源码级可移植的C/C++程序,WinCE都是一个例外:因为它对标准C库的支持是
不完整的。
Lua 5.0版本的时候,有人提供了一个for WinCE的移植,工作的很好。基于
这个移植,我把Lua 5.1也移植了过去。因为Lua使用的是clean C,所以需要
做的改动不算很多,具体参看代码中的lua.c,lua.h,error.h和luacerun.c就
明白了。
shttpd就麻烦得多了,一方面它使用的是ANSI C,需要自己实现的函数更多,
比如文件读写,线程操作等。这些部分虽然麻烦,但是我还是一个个的把这些
缺失的函数自己实现了。更严重的是,WinCE 缺失了两个必不可少的特性:
管道和环境变量。
传统的CGI执行原理是web server通过管道将CGI程序的标准输入输出重定向,
从而向CGI程序发送数据并接收其输出的结果,同时通过设置CGI进程的环境变量,
将HTTP请求的各种信息传递给CGI程序,其中包括GET命令的查询串。这两个功能
WinCE都没有。 重定向的问题,可以通过编写特殊的WinCE驱动模拟解决,但是
也很受限制,使用不便;环境变量的问题则一点办法也没有了。
解决方案:
不过Lua为我们提供了可能的解决方案: 将Lua引擎直接嵌入shttpd。
如果将Lua直接嵌入shttpd,那在处理CGI请求的时候,我们不再需要创建新的
进程,而只需要创建一个新的Lua解释器,并交给一个线程去执行就可以了,这样
不仅在效率上有了提高,也可以适应某些古老的不支持多进程的操作系统了(在
这样的系统上,需要把shttpd也嵌入到主程序当中去)。为了传递原来用环境变
量方式传递的数据,我们在执行脚本之前,在新创建的Lua的解释器里创建一个叫
REQUEST的mapping类型的变量,将所有的数据设置在这个变量中。这样在脚本中
就可以直接使用这个变量了。
CGI程序还必须能够从标准输入接收POST请求,以及从标准输出发送HTML页面。
这一点可以通过修改shttpd,为Lua引擎扩展两个函数来实现,分别是HTTPRead和
HTTPWrite。在脚本中调用这两个函数来实现输入和输出。为了使用方便和习惯,
再把标准的print和io.read函数指向HTTPWrite和HTTPRead(函数在Lua中是第一
类型)。
这两个问题解决之后,剩下的就是用Lua脚本写一个简单的CGI开发框架了,
LuaCGI就是一个很好的框架,只需要把它所使用的SAPI替换成shttpd提供的
接口就可以了。
总结:
用shttp+lua的组合,可以在各种不同的平台,尤其是嵌入式平台上提供web服务
,满足在资源有限的环境中工作的需要。由于Lua是直接嵌入到shttpd中的,它
有着比一般的CGI更高的效率。
评论列表
老梆菜2014-4-7 15:44:00
好!
能否在 arm7/arm9 的 linux 上运行?
jason2014-4-7 15:44:00
这套代码在linux上不需要移植
移植都是为WinCE作的。
arm应该也不是问题,我现在用的是intel xscale.
xueluowutong2019-2-21 16:03:00
楼主,能发我一份能在wince下运行的lua源代码么?
xueluowutong2019-2-21 16:03:00
楼主,能发我一份能在wince下运行的lua源代码么? 我的邮箱:xiekai902@163.com
发表评论
您还没有登录,请[登录]或[注册]
好库简介 | 网站地图 | 帮助中心 | 版权说明
Copyright© 2009-2012 OKBASE.NET All Rights Reserved 好库网 版权所有