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 开发场景中用的最多的是

  1. 数据库 / redis / memcached
  2. HTTP Client
  3. Json / XML
  4. 模板输出
  5. 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 codes return true or false end) local t2 = newthread(function() -- io codes return true or false end)
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 类运算密集型的伪异步支持。

提供两个开发框架

  1. alilua
    基于TCP协议实现网络服务

  2. alilua-coevent-module
    命令行的脚本运行环境

有 mysql / memcached / redis / http 客户端

未来


我们将完成以下工作

  • 连接池 (已实现)
  • 高效率的 router (已实现)
  • 高效率的模板引擎 (已实现)
  • 共享内存 (已实现)
  • 内嵌的k/v缓存系统 (已实现)
  • 文件 aio (v0.5 TODO)

  • 其他还不知道的, 欢迎提出需求

开源、开放






欢迎大家都来‘撸’一把~

alilua-resume

By oneoo huang

alilua-resume

  • 1,954