Lua 4 Web Develop
Lua 是神马?
Lua 是一种脚本语言,类似 PHP/Js/go
超轻量级 / VM 才消耗100KB内存
不支持多线程,但支持协程
坑:缺乏扩展库 / 但能很简单的与 C/C++ 联合运行
Lua 的定位更多是为“胶水语言”
为什么要用 Lua?
简单 / 比PHP还简单
高效 / LuaJIT 能接近 C 的运算性能
Linux 的 epoll 和 aio 是非常高性能的异步IO驱动,但直接用 C 来写业务,开发难度大且开发周期长
而 Lua 作为一个“胶水语言”可以让我们把业务逻辑从 C 语言剥离出来
对!你在用玩具遥控器来控制核武器~
什么是异步?
异步I/O是和同步I/O相比较来说的,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完。
相反,异步I/O操作在后台运行,I/O操作和应用程序可以同时运行,提高了系统性能; 使用异步I/O会提高I/O流量。

异步IO在Web场景
提高网络IO处理能力,减少CPU占用
大量网络读写请求下的效果非常明显
如:网络爬虫
另外 MySQL / memcached / redis / raik 等数据存储
都通过 TCP 协议进行操作,都是网络IO
那么可以说我们在 Web 场景中耗时最多的就在网络IO处理上
而异步IO处理模式最适合这样的应用场景。
还纠结 Lua 缺乏库支持?
在 Web 开发场景中用的最多的是
- 数据库 / redis / memcached
- HTTP Client
- Json / XML
- 模板输出
- if/else/for
相信我,你的业务代码60%是IO操作,另外的39%会是 if / else
只剩下1%是其他类型的操作了,亲 ;)
既然这样请不要再纠结 Lua 没图片处理或音频处理之类无关的事情
Lua 只做一个高性能的 Web 开发底层支持
Lua 怎么个简单法?
L = require('coevent')L(function() -- 异步IO支持的环境 -- 也是业务代码local db = require('mysql')local ret,err = db:connect(...)local ret,err = db:send_query('SELECT * FROM table')local res,err = db:read_result()print(cjson.encode(res)) end)
上面5行业务代码,其中4行是异步的,只有最后一行 encode 纯运算类型而无法异步。
Lua 脚本开发者完全不用关心是否异步方法,如何异步的。
当然还可以并发
L = require('coevent')L(function()local t1 = newthread(function()-- io codesreturn true or falseend)local t2 = newthread(function()-- io codesreturn true or falseend)local rt1 = wait(t1)local rt2 = wait(t2)end)
如不使用 wait 接收子任务的结果,那这个子任务将处于状态剥离状态,一直执行到结束,而主任务是不会被此而堵塞。
舒畅的Lua
对就像PHP那麽‘傻’,随处定义变量,随意覆盖函数
跟 PHP 一样的逻辑思路,顺序书写业务代码
Lua 开发者不知道异步,也不用关心异步
但却享用到异步带来的性能提升
这里没有 callback
我发现书写 node.js 的 callback,N层嵌套非常痛苦,编码效率低
所以我们设计的这个框架不做这种反人类的模式
就按顺序逻辑思维来轻松书写 Lua ,不用绕弯子
目前他们也使用 Lua
淘宝 - ngx_lua openresty 性能出众的 Web 开发框架
魔兽世界 - 很多客户端游戏使用 Lua 编写业务逻辑(非常流行)
迅雷 - 客户端软件开发框架(很强悍)
redis
。。。
还有很多
aLiLua 现在
基于 epoll 提供异步IO事件驱动,对 Lua 协程进行调度
目前仅支持网络IO
未来会加入文件IO和 gzip 类运算密集型的伪异步支持。
提供两个开发框架
-
alilua
基于TCP协议实现网络服务
- alilua-coevent-module
命令行的脚本运行环境
有 mysql / memcached / redis / http 客户端
未来
我们将完成以下工作
- 连接池 (已实现)
- 高效率的 router (已实现)
- 高效率的模板引擎 (已实现)
- 共享内存 (已实现)
- 内嵌的k/v缓存系统 (已实现)
- 文件 aio (v0.5 TODO)
- 其他还不知道的, 欢迎提出需求
开源、开放
GitHub: https://github.com/oneoo/alilua
欢迎大家都来‘撸’一把~
alilua-resume
By oneoo huang
alilua-resume
- 1,954