标签 Lua 下的文章

一个例子

test.c

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h" //编译安装会获得这些库文件
static int test(lua_State* lua){
    const char *name = NULL; //指针,用于存储
    name = luaL_checkstring(lua,1); //出栈,从栈中取一个参数
    printf("Hello ",name);
    lua_pushstring(lua,name); //入栈,返回数据
    return 1; //告诉Lua返回值个数
}
//一个映射表,映射模块中的函数
static const struct luaL_Reg libtest[] = {
    {"test",test}, //Lua函数名,函数地址
    {NULL,NULL}
};
//注册函数
int luaopen_test(lua_State* lua){
    //luaL_register(lua, "hello", libhello); 在5.1(含)版本前,需要通过此函数注册模块
    //5.1后注册方式
    lua_newtable(lua);
    luaL_setfuncs(lua,libtest,0);
    return 1;
}

编译:

gcc test.c -fPIC -shared -o test.so //编译为动态链接库

调用:

Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> test = require 'test'
> test.test('jiang')
Hello jiang

一些Api

出栈,取参数:
1.png
入栈,返回
2.png

OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统。

1.安装依赖包

sudo apt-get install gcc g++ make libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev

2.下载源码

我们需要分别下载nginx,luajit以及lua-nginx-module

#nginx 1.14.2,LuaJIT 2.0.5,lua-nginx-module 0.10.13
mkdir temp && cd temp/
wget http://nginx.org/download/nginx-1.14.2.tar.gz
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz
tar xfvz nginx-1.14.2.tar.gz
tar xfvz LuaJIT-2.0.5.tar.gz
tar xfvz v0.10.13.tar.gz

3.编译Nginx

cd LuaJIT-2.0.5/
make && make install
cd ../nginx-1.14.2/
#指定luajit目录
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
#新建一个文件夹,这将作为安装目录
mkdir /etc/nginx
#配置模块
./configure --prefix=/etc/nginx --add-module=../lua-nginx-module-0.10.13 --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module
make -j2 && make install

4.配置使用

打开/etc/nginx/conf/nginx.conf加入:

location /lua {
  default_type 'text/plain';
  content_by_lua 'ngx.say("hello")';
}

然后运行nginx:

/etc/nginx/sbin/nginx

测试!

curl http://localhost/lua
hello

1.安装编译环境

sudo apt-get install -y make gcc g++

1.png

2.安装依赖

sudo apt-get install -y libreadline5 libreadline-gplv2-dev

2.png

3.下载源码

wget http://www.lua.org/ftp/lua-5.3.4.tar.gz
tar zxf lua-5.3.4.tar.gz

3.png
4.png

4.编译lua

cd lua-5.3.4
make linux
sudo make install

5.png
6.png

(编译可能时间较长,等待一下就好,出现警告无视就好)

5.安装完毕,输入 lua 进入lua环境

8.png

6.删除源码

编译过后源码就没有用了,可以删除掉。

cd ../
rm -r lua-5.3.4

7.png