Luvit像Node.js一样写Lua应用

时间:2021-05-23

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 Speed100 127 100 127 0 0 57 0 0:00:02 0:00:02 --:--:-- 57100 567 100 567 0 0 192 0 0:00:02 0:00:02 --:--:-- 1788Downloading 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 Speed100 615 0 615 0 0 280 0 --:--:-- 0:00:02 --:--:-- 280100 4261k 100 4261k 0 0 481k 0 0:00:08 0:00:08 --:--:-- 1007kDownloading 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 Speed100 234k 100 234k 0 0 91459 0 0:00:02 0:00:02 --:--:-- 91488lit version: 3.5.4luvi version: v2.7.6command: make lit.zip lit luvicreate config: /root/.litconfigcompiling filter: ** excludes by default (first rule is positive)including: commands/READMEincluding: commands/add.luaincluding: commands/auth.luaincluding: commands/claim.luaincluding: commands/config.luaincluding: commands/down.luaincluding: commands/get-luvi.luaincluding: commands/help.luaincluding: commands/init.luaincluding: commands/install.luaincluding: commands/ls.luaincluding: commands/make.luaincluding: commands/publish.luaincluding: commands/serve.luaincluding: commands/share.luaincluding: commands/sync.luaincluding: commands/unclaim.luaincluding: commands/up.luaincluding: commands/update.luaincluding: init.luaincluding: libs/api.luaincluding: libs/auto-updater.luaincluding: libs/autoconfig.luaincluding: libs/calculate-deps.luaincluding: libs/codec.luaincluding: libs/core.luaincluding: libs/db-fs.luaincluding: libs/db.luaincluding: libs/exec.luaincluding: libs/export-zip.luaincluding: libs/export.luaincluding: libs/get-installed.luaincluding: libs/github-request.luaincluding: libs/handlers.luaincluding: libs/import.luaincluding: libs/install-deps.luaincluding: libs/log.luaincluding: libs/metrics.luaincluding: libs/pkg.luaincluding: libs/rdb.luaincluding: libs/rules.luaincluding: libs/snapshots.luaincluding: libs/stats.luaincluding: libs/verify-signature.luaincluding: libs/vfs.luaincluding: luvit-loader.luaincluding: main.luaincluding: package.luaincluding 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.luaincluding: db.luaincluding: init.luaincluding: package.luaincluding: storage.luacreating binary: /root/litusing luvi from: /root/luviinserting luvi: /root/luvistoring: commands/add.luacompiling: commands/auth.lua (9.9% reduction)storing: commands/claim.luastoring: commands/config.luastoring: commands/down.luacompiling: commands/get-luvi.lua (20.7% reduction)storing: commands/help.luacompiling: commands/init.lua (14.9% reduction)storing: commands/install.luacompiling: commands/ls.lua (2.6% reduction)storing: commands/make.luastoring: commands/publish.luacompiling: commands/serve.lua (19% reduction)storing: commands/share.luastoring: commands/sync.luastoring: commands/unclaim.luastoring: commands/up.luacompiling: 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.luacompiling: 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.luastoring: deps/git/package.luacompiling: 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.luacompiling: 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.luacompiling: 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.luacompiling: 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/litdone: successlit version: 3.5.4luvi version: v2.7.6command: make lit://luvit/luvit luvit luviload config: /root/.litconfigconnecting: wss://lit.luvit.io/fetching: 1 objectfetching: 1 objectfetching: 4 objectsusing snapshot: ab0b6ace5a16a88e6fbb4c8da0083c40cf1d6803creating binary: /root/luvitusing luvi from: /root/luvifetching: 1 objectfetching: 1 objectfetching: 27 objectsfetching: 16 objectsinserting luvi: /root/luvicompiling: 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.luacompiling: 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.luacompiling: 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.luadone building: /root/luvitdone: success[root@kong ~]#

安装结果确认

[root@kong ~]# ./lit --versionlit version: 3.5.4luvi version: v2.7.6[root@kong ~]# ./luvi --version./luvi v2.7.6rex: 8.37 2015-04-28libuv: 1.9.1ssl: OpenSSL 1.0.2h 3 May 2016, lua-openssl 0.5.1[root@kong ~]# ./luvit --versionluvit version: 2.14.2luvi version: v2.7.6rex version: 8.37 2015-04-28libuv version: 1.9.1ssl 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 ~]#

总结

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章