Luvit像Node.js一样写Lua应用
luvit是什么?它是目前Lua这个小众语言中较为流行的一个开源框架,给那些习惯使用Lua的开发者一个机会向写Node.js一样用Lua进行开发,它是Lua的Node.js.在Gitlab上,项目的描述对于Luvit是这样描述的:Lua + libUV + jIT = pure awesomesauce。
概要信息
安装
提供了安装脚本进行一键安装,但是版本不是最新,如果需要最新的版本,可以从源码开始
curl -L https://github.com/luvit/lit/raw/master/get-lit.sh | sh
安装日志
[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)