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 ~]#

    总结

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