php node lua,Luvit像Node.js一样写Lua应用

71cfcd465081006b7751cec7e85797ff.png

luvit是什么?它是目前Lua这个小众语言中较为流行的一个开源框架,给那些习惯使用Lua的开发者一个机会向写Node.js一样用Lua进行开发,它是Lua的Node.js.在Gitlab上,项目的描述对于Luvit是这样描述的:Lua + libUV + jIT = pure awesomesauce。

概要信息

9378ab30e438cc9fcd55840da5a3e002.png

安装

提供了安装脚本进行一键安装,但是版本不是最新,如果需要最新的版本,可以从源码开始

安装日志

[root@kong ~]# curl -L https://github.com/luvit/lit/raw/master/get-lit.sh | sh

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 127 100 127 0 0 57 0 0:00:02 0:00:02 --:--:-- 57

100 567 100 567 0 0 192 0 0:00:02 0:00:02 --:--:-- 1788

Downloading https://github.com/luvit/luvi/releases/download/v2.7.6/luvi-regular-Linux_x86_64 to luvi

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 615 0 615 0 0 280 0 --:--:-- 0:00:02 --:--:-- 280

100 4261k 100 4261k 0 0 481k 0 0:00:08 0:00:08 --:--:-- 1007k

Downloading https://lit.luvit.io/packages/luvit/lit/v3.5.4.zip to lit.zip

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 234k 100 234k 0 0 91459 0 0:00:02 0:00:02 --:--:-- 91488

lit version: 3.5.4

luvi version: v2.7.6

command: make lit.zip lit luvi

create config: /root/.litconfig

compiling filter: ** excludes by default (first rule is positive)

including: commands/README

including: commands/add.lua

including: commands/auth.lua

including: commands/claim.lua

including: commands/config.lua

including: commands/down.lua

including: commands/get-luvi.lua

including: commands/help.lua

including: commands/init.lua

including: commands/install.lua

including: commands/ls.lua

including: commands/make.lua

including: commands/publish.lua

including: commands/serve.lua

including: commands/share.lua

including: commands/sync.lua

including: commands/unclaim.lua

including: commands/up.lua

including: commands/update.lua

including: init.lua

including: libs/api.lua

including: libs/auto-updater.lua

including: libs/autoconfig.lua

including: libs/calculate-deps.lua

including: libs/codec.lua

including: libs/core.lua

including: libs/db-fs.lua

including: libs/db.lua

including: libs/exec.lua

including: libs/export-zip.lua

including: libs/export.lua

including: libs/get-installed.lua

including: libs/github-request.lua

including: libs/handlers.lua

including: libs/import.lua

including: libs/install-deps.lua

including: libs/log.lua

including: libs/metrics.lua

including: libs/pkg.lua

including: libs/rdb.lua

including: libs/rules.lua

including: libs/snapshots.lua

including: libs/stats.lua

including: libs/verify-signature.lua

including: libs/vfs.lua

including: luvit-loader.lua

including: main.lua

including: package.lua

including dependency: base64 (deps/base64.lua)

including dependency: coro-channel (deps/coro-channel.lua)

including dependency: coro-fs (deps/coro-fs.lua)

including dependency: coro-http (deps/coro-http.lua)

including dependency: coro-net (deps/coro-net.lua)

including dependency: coro-spawn (deps/coro-spawn.lua)

including dependency: coro-split (deps/coro-split.lua)

including dependency: coro-websocket (deps/coro-websocket.lua)

including dependency: coro-wrapper (deps/coro-wrapper.lua)

including dependency: git (deps/git/)

including dependency: http-codec (deps/http-codec.lua)

including dependency: json (deps/json.lua)

including dependency: md5 (deps/md5.lua)

including dependency: pathjoin (deps/pathjoin.lua)

including dependency: pretty-print (deps/pretty-print.lua)

including dependency: prompt (deps/prompt.lua)

including dependency: querystring (deps/querystring.lua)

including dependency: readline (deps/readline.lua)

including dependency: resource (deps/resource.lua)

including dependency: secure-socket (deps/secure-socket/)

including dependency: semver (deps/semver.lua)

including dependency: sha1 (deps/sha1.lua)

including dependency: ssh-rsa (deps/ssh-rsa.lua)

including dependency: ustring (deps/ustring.lua)

including dependency: weblit-app (deps/weblit-app.lua)

including dependency: weblit-auto-headers (deps/weblit-auto-headers.lua)

including dependency: weblit-websocket (deps/weblit-websocket.lua)

including dependency: websocket-codec (deps/websocket-codec.lua)

compiling filter: deps/git/** excludes by default (first rule is positive)

including: core.lua

including: db.lua

including: init.lua

including: package.lua

including: storage.lua

creating binary: /root/lit

using luvi from: /root/luvi

inserting luvi: /root/luvi

storing: commands/add.lua

compiling: commands/auth.lua (9.9% reduction)

storing: commands/claim.lua

storing: commands/config.lua

storing: commands/down.lua

compiling: commands/get-luvi.lua (20.7% reduction)

storing: commands/help.lua

compiling: commands/init.lua (14.9% reduction)

storing: commands/install.lua

compiling: commands/ls.lua (2.6% reduction)

storing: commands/make.lua

storing: commands/publish.lua

compiling: commands/serve.lua (19% reduction)

storing: commands/share.lua

storing: commands/sync.lua

storing: commands/unclaim.lua

storing: commands/up.lua

compiling: commands/update.lua (23.3% reduction)

compiling: deps/base64.lua (29.2% reduction)

compiling: deps/coro-channel.lua (19.7% reduction)

storing: deps/coro-fs.lua

compiling: deps/coro-http.lua (30.4% reduction)

compiling: deps/coro-net.lua (18.5% reduction)

compiling: deps/coro-spawn.lua (44% reduction)

compiling: deps/coro-split.lua (34.4% reduction)

compiling: deps/coro-websocket.lua (34.6% reduction)

compiling: deps/coro-wrapper.lua (66.1% reduction)

compiling: deps/git/core.lua (3.4% reduction)

compiling: deps/git/db.lua (18.7% reduction)

storing: deps/git/init.lua

storing: deps/git/package.lua

compiling: deps/git/storage.lua (34.5% reduction)

compiling: deps/http-codec.lua (37.2% reduction)

compiling: deps/json.lua (30.7% reduction)

storing: deps/md5.lua

compiling: deps/pathjoin.lua (33.5% reduction)

compiling: deps/pretty-print.lua (30.4% reduction)

compiling: deps/prompt.lua (43.4% reduction)

compiling: deps/querystring.lua (35.9% reduction)

compiling: deps/readline.lua (18.6% reduction)

compiling: deps/resource.lua (31.5% reduction)

compiling: deps/secure-socket/biowrap.lua (31.8% reduction)

compiling: deps/secure-socket/context.lua (27.4% reduction)

compiling: deps/secure-socket/init.lua (52.5% reduction)

storing: deps/secure-socket/package.lua

compiling: deps/semver.lua (28.2% reduction)

compiling: deps/sha1.lua (27.9% reduction)

compiling: deps/ssh-rsa.lua (16.2% reduction)

compiling: deps/ustring.lua (37.1% reduction)

compiling: deps/weblit-app.lua (14.8% reduction)

compiling: deps/weblit-auto-headers.lua (50.9% reduction)

compiling: deps/weblit-websocket.lua (35.8% reduction)

compiling: deps/websocket-codec.lua (18.2% reduction)

storing: init.lua

compiling: libs/api.lua (30.9% reduction)

compiling: libs/auto-updater.lua (29% reduction)

compiling: libs/autoconfig.lua (32.3% reduction)

compiling: libs/calculate-deps.lua (30.4% reduction)

compiling: libs/codec.lua (31.2% reduction)

compiling: libs/core.lua (14% reduction)

compiling: libs/db-fs.lua (29.5% reduction)

compiling: libs/db.lua (38.2% reduction)

compiling: libs/exec.lua (45.1% reduction)

compiling: libs/export-zip.lua (36.4% reduction)

compiling: libs/export.lua (36.6% reduction)

compiling: libs/get-installed.lua (45.9% reduction)

compiling: libs/github-request.lua (49.8% reduction)

compiling: libs/handlers.lua (18.1% reduction)

compiling: libs/import.lua (27.6% reduction)

compiling: libs/install-deps.lua (38.4% reduction)

compiling: libs/log.lua (60.7% reduction)

compiling: libs/metrics.lua (56.8% reduction)

compiling: libs/pkg.lua (36.9% reduction)

compiling: libs/rdb.lua (22.2% reduction)

compiling: libs/rules.lua (29.7% reduction)

compiling: libs/snapshots.lua (12.6% reduction)

compiling: libs/stats.lua (1.5% reduction)

compiling: libs/verify-signature.lua (40.8% reduction)

compiling: libs/vfs.lua (29.9% reduction)

compiling: luvit-loader.lua (29.8% reduction)

compiling: main.lua (24.3% reduction)

compiling: package.lua (14.8% reduction)

done building: /root/lit

done: success

lit version: 3.5.4

luvi version: v2.7.6

command: make lit://luvit/luvit luvit luvi

load config: /root/.litconfig

connecting: wss://lit.luvit.io/

fetching: 1 object

fetching: 1 object

fetching: 4 objects

using snapshot: ab0b6ace5a16a88e6fbb4c8da0083c40cf1d6803

creating binary: /root/luvit

using luvi from: /root/luvi

fetching: 1 object

fetching: 1 object

fetching: 27 objects

fetching: 16 objects

inserting luvi: /root/luvi

compiling: deps/buffer.lua (16.5% reduction)

compiling: deps/childprocess.lua (19.1% reduction)

compiling: deps/codec.lua (35.3% reduction)

compiling: deps/core.lua (57.3% reduction)

compiling: deps/dgram.lua (25.5% reduction)

compiling: deps/dns.lua (25.1% reduction)

compiling: deps/fs.lua (6.2% reduction)

compiling: deps/helpful.lua (42.7% reduction)

compiling: deps/hooks.lua (83.3% reduction)

compiling: deps/http-codec.lua (37.4% reduction)

compiling: deps/http-header.lua (59.4% reduction)

compiling: deps/http.lua (29.6% reduction)

compiling: deps/https.lua (45.6% reduction)

compiling: deps/json.lua (30.7% reduction)

compiling: deps/los.lua (76.9% reduction)

compiling: deps/net.lua (13.9% reduction)

compiling: deps/path/base.lua (24.9% reduction)

compiling: deps/path/init.lua (49.7% reduction)

storing: deps/path/package.lua

compiling: deps/pathjoin.lua (33.5% reduction)

compiling: deps/pretty-print.lua (30.6% reduction)

compiling: deps/process.lua (17.2% reduction)

compiling: deps/querystring.lua (35.9% reduction)

compiling: deps/readline.lua (18.6% reduction)

compiling: deps/repl.lua (28.2% reduction)

compiling: deps/require.lua (24.6% reduction)

compiling: deps/resource.lua (31.5% reduction)

compiling: deps/stream/init.lua (55.6% reduction)

storing: deps/stream/package.lua

compiling: deps/stream/stream_core.lua (38.5% reduction)

compiling: deps/stream/stream_duplex.lua (49.7% reduction)

compiling: deps/stream/stream_observable.lua (50.8% reduction)

compiling: deps/stream/stream_passthrough.lua (65.3% reduction)

compiling: deps/stream/stream_readable.lua (48.2% reduction)

compiling: deps/stream/stream_transform.lua (62% reduction)

compiling: deps/stream/stream_writable.lua (43% reduction)

compiling: deps/thread.lua (38.6% reduction)

compiling: deps/timer.lua (24% reduction)

compiling: deps/tls/common.lua (14.9% reduction)

compiling: deps/tls/init.lua (26.1% reduction)

compiling: deps/tls/lcrypto.lua (46.8% reduction)

compiling: deps/tls/package.lua (2.6% reduction)

compiling: deps/url.lua (32.8% reduction)

compiling: deps/ustring.lua (37.5% reduction)

compiling: deps/utils.lua (39.7% reduction)

compiling: init.lua (43.5% reduction)

compiling: main.lua (21.6% reduction)

compiling: package.lua (21.1% reduction)

storing: test.lua

done building: /root/luvit

done: success

[root@kong ~]#

安装结果确认

[root@kong ~]# ./lit --version

lit version: 3.5.4

luvi version: v2.7.6

[root@kong ~]# ./luvi --version

./luvi v2.7.6

rex: 8.37 2015-04-28

libuv: 1.9.1

ssl: OpenSSL 1.0.2h 3 May 2016, lua-openssl 0.5.1

[root@kong ~]# ./luvit --version

luvit version: 2.14.2

luvi version: v2.7.6

rex version: 8.37 2015-04-28

libuv version: 1.9.1

ssl version: OpenSSL 1.0.2h 3 May 2016, lua-openssl 0.5.1

[root@kong ~]#

拷贝至PATH搜索目录

[root@kong ~]# cp lit /usr/local/bin

[root@kong ~]# cp luvi /usr/local/bin

[root@kong ~]# cp luvit /usr/local/bin

[root@kong ~]#

[root@kong ~]# which luvi

/usr/local/bin/luvi

[root@kong ~]# which lit

/usr/local/bin/lit

[root@kong ~]# which luvit

/usr/local/bin/luvit

[root@kong ~]#

Lua界的Node.js

一个Node.js的HelloWorld的server.js可能是这样的,运行则是使用node server.js

var http = require('http');

http.createServer(function (req, res) {

var body = 'Hello world\n';

res.setHeader('Content-Type', 'text/plain');

res.setHeader('Content-Length', body.length);

res.end(body);

}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337/');

而Luvit的HelloWorld的Server.lua则是这样的,运行则是使用luvit server.lua

[root@kong ~]# cat server.lua

local http = require('http')

http.createServer(function (req, res)

local body = 'Hello world\n'

res:setHeader('Content-Type', 'text/plain')

res:setHeader("Content-Length", #body)

res:finish(body)

end):listen(1337, '127.0.0.1')

print('Server running at http://127.0.0.1:1337/')

[root@kong ~]#

运行结果为:

[root@kong ~]# luvit server.lua

Server running at http://127.0.0.1:1337/

确认结果:

[root@kong ~]# curl http://localhost:1337

Hello world

[root@kong ~]#

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node-Lua是一款基于Lua实现的脚本和服务器引擎,它支持构建海量Lua服务(Context_Lua)并以多线程方式运行在多核服务器上,采用了任务多路复用的设计方案,有效利用了多核优势。node-lua致力于构建一个快速、简单易用的Lua脚本和服务器开发和运行环境。该引擎参考了Node-Js和Skynet的设计思想,并对其进行了整合和优化。 该引擎当前版本实现了以下特性: 引擎核心层同时支持同步阻塞和异步回调的api设计方案,让异步io等接口更加简单易用。调用同步和异步api时引擎核心层将会自动挂起正在执行的lua函数(coroutine),直接放弃占用的cpu资源; 服务创建以指定lua文件为入口脚本文件,脚本直接运行在新服务的coroutine环境中,支持在入口脚本当中直接调用同步和异步api接口,支持无限循环调用同步api接口;可以创建海量独立的lua服务(context_lua),引擎会根据当前运行服务总量和物理核心数量动态调整工作线程数量,当引擎没有需要处理的服务请求时(即任务队列为空),所有物理线程将会挂起等待,直到有新的任务(lua同步和异步回调)需要被唤醒运行;支持在用户创建的lua coroutine中直接调用引擎提供的同步和异步api接口,对用户态coroutine执行不会产生任何影响;引擎会检测进程当中有效的lua服务总量,当服务总量为0时,引擎会自动安全退出(可以用node-lua作为简单的lua脚本解释器使用)。同时,lua服务也会检测服务当中运行和挂起的同步和异步回调总量,当回调总量为0时,lua服务会被标记并安全退出;引擎框架任务调度采用了线程任务队列的设计,减少了不同线程之间对任务资源的竞争。另外,任务调度也引入了work-stealing算法对调度进行了深度优化;引擎提供了tcp socket相关的大部分api接口,同时支持unix_domain_socket;引擎提供了lua服务相关的api接口,包括服务创建、销毁、通信等同步和异步接口;引擎提供了定时相关的api接口,基本满足所有的定时设计,并直接被嵌入到了其它同步和异步api接口当中(tcp,服务相关的api等);引擎提供了快速lua字符串缓存结构,可以用于高效的广播接口当中;引擎当前提供了centos,macos,windows环境下的编译和安装;Node-Lua在下个版本将会提供以下新功能和特性: udp接口支持;tcp和udp socket在lua服务之间的迁移;在线服务热更新;在线服务调试;提供FreeBSD等环境下的编译和安装;提供基准测试版本;欢迎大家发现Node-Lua当中的bug,对Node-Lua提出更好的建议! 标签:NodeLua
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值