这个想法赞!
在 2015年3月27日 上午6:33,Jacky <zron...@gmail.com> 写道:
> 好东西!我来玩玩看。
>
>
> On 23:26, Thu, Mar 26, 2015 null <nett...@gmail.com> wrote:
>>
>> 半年前接触了ngx_openresty,非常喜欢,小灵快的软件!
>>
>>> 不过最近我一直在想,为什么非要nginx+lua呢?为什么不能是纯lua的webservice框架呢?我们有Ruby on
>>> Rails,对于Python,我们有Flask,为什么不给Lua做一个呢?
>>
>>
>>>
>>> 不是说不喜欢nginx,而是更喜欢Lua。另外nginx的配置语法实在让我崩溃,nginx+lua肯定没有纯Lua更让人激动了。
>>
>>
>>>
>>>
>>> 于是手痒就做了一个,放在http://github.com/xphh/lnet。不是过来推销哈,只是个玩具罢了,希望有人能一起讨论讨论。也许已经有类似的东西,那就是重复造轮子了,博得大家一笑。;
>>
>>
>> 简单介绍一下:
>>
>>
>> Lua本身没有原装的socket以及poll的API,所以仍然不得不用C封装一下socket和epoll(windows暂时用select)的基本接口。C的部分基本仅限于此。
>>
>> httpserver的事件模型整个的放在Lua代码里面。为了利用多核,不得不用多线程。一个线程用于listen,n个线程作为worker。所以C代码还封装线程和锁(锁只是为了同步写日志文件而已)。
>> 整个http解析和生成代码都在Lua代码中。
>> 使用config.lua做配置,使用非常方便。
>> 目前支持:
>>
>> 静态页面,包括配置web根目录,默认页面(index.htm等),mime类型等等。
>>
>> handler:跟ngx_openresty类似,在config里面可配置uri规则(使用标准的Lua正则表达式,摆脱坑爹的nginx正则)对应的Lua执行脚本,支持code
>> cache on/off。
>>
>> 动态页面:说白了就是handler扩展出来的一个功能,可以在html中内嵌Lua代码,计算后输出整张页面,就是干了PHP的工作。这个目前是全动态不cache的,效率不高。
>> cosocket:协程阻塞线程非阻塞的socket封装。
>>
>> 目前不支持:
>>
>>
>> 多端口监听:目前只是一个单一的httpserver,不像nginx是个multi-httpserver。要做也能做,就是复杂些。但是其实我们聚焦在单纯的web
>> appserver上,多端口是多余的。
>> https:目前不支持https。其实对于后端的web
>> appserver,从性能上讲,也没必要支持。前端摆个nginx把https解开往后传http就行了,架构上更合理,性能也更高。
>>
>> 既然用Lua替代了nginx,肯定会质疑性能问题。经过我少许的优化,我惊讶的发现性能居然还行!
>>
>> 采用ngx_openresty官网上的测试方法,输出hello world页面,用“ab -c10
>> -n50000”去压测。我在阿里云单核512M内存机子(是的,因为穷)上的结果:
>>
>> ngx_openresty:9000rps左右
>> lnet(也就是我这个):7800rps左右
>>
>> 能有接近90%的性能的样子!主要应该是Lua
>> table、string反复创建,以及gc的影响吧。虽然和ngx_openresty没法比,但也秒杀了ngx_openresty官网上列举的参照物。
>>
>> 希望这里的Luaer们能喜欢,拿来玩玩,做个轻型的web appserver还是很方便的,安装配置都要容易。
>>
>> 有什么想交流的,国内的朋友也可以单独发我邮件:netten2005@163.com
>>
>> --
>> --
> --
Life's Pathetic, Let's Pythonic! 人生苦短, Python是岸!
俺: http://zoomquiet.io
授: http://creativecommons.org/licenses/by-sa/2.5/cn/
怒: 冗余不做,日子甭过!备份不做,十恶不赦!
KM keep growing environment culture which promoting organization be learnning!