• 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

    安装日志

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128

    129

    130

    131

    132

    133

    134

    135

    136

    137

    138

    139

    140

    141

    142

    143

    144

    145

    146

    147

    148

    149

    150

    151

    152

    153

    154

    155

    156

    157

    158

    159

    160

    161

    162

    163

    164

    165

    166

    167

    168

    169

    170

    171

    172

    173

    174

    175

    176

    177

    178

    179

    180

    181

    182

    183

    184

    185

    186

    187

    188

    189

    190

    191

    192

    193

    194

    195

    196

    197

    198

    199

    200

    201

    202

    203

    204

    205

    206

    207

    208

    209

    210

    211

    212

    213

    214

    215

    216

    217

    218

    219

    220

    221

    222

    223

    224

    225

    226

    227

    228

    229

    230

    231

    232

    233

    234

    235

    236

    237

    238

    239

    240

    241

    242

    243

    244

    245

    246

    247

    248

    249

    250

    251

    252

    253

    254

    255

    256

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

    安装结果确认

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    [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搜索目录

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    [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

    1

    2

    3

    4

    5

    6

    7

    8

    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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    [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 <a href="http://127.0.0.1:1337/')[root@kong" rel="external nofollow">http://127.0.0.1:1337/')

    [root@konga> ~]#

    运行结果为:

    [root@kong ~]# luvit server.lua
    Server running at http://127.0.0.1:1337/

    确认结果:

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

     

  • 相关阅读:
    程序设计6大原则
    [附源码]计算机毕业设计springboot演唱会门票售卖系统
    Mybatis 动态语言 - mybatis-thymeleaf
    推动城市运动发展,WML打造飞盘超级周末
    一次Go项目进程重启故障问题排查
    创建React + Ts项目
    数据结构-字符串详解
    JTS-通过Coordinate点截断几何Geometry
    一招解决IDEA使用Junit4自动创建的测试类无内容问题
    【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量
  • 原文地址:https://blog.csdn.net/sinat_40572875/article/details/127841460