lua和web连接问题

  lua是一个小巧的脚本语言,专用于嵌入和扩展。它和C/C++代码有着良好 的交互能力。由于体积小,很适合嵌入到其他程序中为程序提供脚本功能。 lua在大多数平台上都可以顺利编译、运行。网址

  shttpd是一个小巧的web服务器,小巧到只有一个.c文件,4000余行代码。 虽然体积很小,却具备了最基本的功能,比如CGI。它既可以独立运行, 也可以嵌入到其他的应用程序当中。shttpd在大多数平台上都可以顺利 编译、运行。网址

  很多设备都提供Web服务用于配置,比如路由器,ADSL猫等等。这种设备所 提供的web服务的典型用例是用户填写一些参数,提交给Web服务器,Web服务器 将这些参数写入硬件,并将操作结果或者其他信息生成页面返回给浏览器。 如果使用Apache,PHP,MySQL这种组合,一方面资源未必能承受,另一方面这些

  如果shttpd和lua结合起来,一个用来提供基本的web服务,另一个用来编写 CGI脚本,应该是一个很不错的选择。他们都具备体积小,占用资源少的特点, 又都宣称源码级可移植。如果有更高的需要,也可以把sqlite加入,提供数据 库服务(sqlite是一个嵌入式的数据库,同样体积小巧,并且可以在很多平台 上工作)。不带sqlite,体积仅仅300k,加上sqlite大约500k,对于嵌入式应 用非常合适。

  虽然lua使用的是比ANSI还要小的clean C,并且号称在所有平台上不用修改 任何东西就可以直接make成功,但是WinCE却是一个例外。事实上,对大多数 源码级可移植的C/C++程序,WinCE都是一个例外:因为它对标准C库的支持是 不完整的。

  shttpd就麻烦得多了,一方面它使用的是ANSI C,需要自己实现的函数更多, 比如文件读写,线程操作等。这些部分虽然麻烦,但是我还是一个个的把这些 缺失的函数自己实现了。更严重的是,WinCE 缺失了两个必不可少的特性: 管道和环境变量。

  传统的CGI执行原理是web server通过管道将CGI程序的标准输入输出重定向, 从而向CGI程序发送数据并接收其输出的结果,同时通过设置CGI进程的环境变量, 将HTTP请求的各种信息传递给CGI程序,其中包括GET命令的查询串。这两个功能 WinCE都没有。 重定向的问题,可以通过编写特殊的WinCE驱动模拟解决,但是 也很受限制,使用不便;环境变量的问题则一点办法也没有了。

  如果将Lua直接嵌入shttpd,那在处理CGI请求的时候,我们不再需要创建新的 进程,而只需要创建一个新的Lua解释器,并交给一个线程去执行就可以了,这样 不仅在效率上有了提高,也可以适应某些古老的不支持多进程的操作系统了(在 这样的系统上,需要把shttpd也嵌入到主程序当中去)。为了传递原来用环境变 量方式传递的数据,我们在执行脚本之前,在新创建的Lua的解释器里创建一个叫 REQUEST的mapping类型的变量,将所有的数据设置在这个变量中。这样在脚本中 就可以直接使用这个变量了。

  CGI程序还必须能够从标准输入接收POST请求,以及从标准输出发送HTML页面。 这一点可以通过修改shttpd,为Lua引擎扩展两个函数来实现,分别是HTTPRead和 HTTPWrite。在脚本中调用这两个函数来实现输入和输出。为了使用方便和习惯,

  这两个问题解决之后,剩下的就是用Lua脚本写一个简单的CGI开发框架了, LuaCGI就是一个很好的框架,只需要把它所使用的SAPI替换成shttpd提供的 接口就可以了。

  用shttp+lua的组合,可以在各种不同的平台,尤其是嵌入式平台上提供web服务 ,满足在资源有限的环境中工作的需要。由于Lua是直接嵌入到shttpd中的,它 有着比一般的CGI更高的效率。
因为要用一个全屏网页覆盖整个游戏,需要能在js里直接调用lua的函数,网上搜了一圈没有发现怎样实现回调,自己写了份,共享给大家

1,把代码中的webview调通并且到处到lua,这步请自行搜索,网上一堆教程,这样就可以在lua中调用webview的大部分函数了


我要回帖

更多关于 lua websocket 的文章

 

随机推荐