java openresty 调用_openresty下lua的function定义及调用

本文主要研究下如何在openresty下lua的function定义及调用。

源码示例

/usr/local/openresty/lualib/resty/string.lua

-- Copyright (C) by Yichun Zhang (agentzh)

local ffi = require "ffi"

local ffi_new = ffi.new

local ffi_str = ffi.string

local C = ffi.C

local setmetatable = setmetatable

local error = error

local tonumber = tonumber

local _M = { _VERSION = '0.09' }

ffi.cdef[[

typedef unsigned char u_char;

u_char * ngx_hex_dump(u_char *dst, const u_char *src, size_t len);

intptr_t ngx_atoi(const unsigned char *line, size_t n);

]]

local str_type = ffi.typeof("uint8_t[?]")

function _M.to_hex(s)

local len = #s * 2

local buf = ffi_new(str_type, len)

C.ngx_hex_dump(buf, s, #s)

return ffi_str(buf, len)

end

function _M.atoi(s)

return tonumber(C.ngx_atoi(s, #s))

end

return _M

实例

demo.lua

local _M = { _VERSION = '0.01' }

function _M.hello()

ngx.say("hello from demo module!")

end

return _M

conf

location /function {

content_by_lua '

local demo = require("demo")

demo.hello()

';

}

报错

2018/03/26 16:24:15 [error] 5#5: *1 lua entry thread aborted: runtime error: content_by_lua(nginx.conf:69):2: module 'demo' not found:

no field package.preload['demo']

no file '/usr/local/openresty/lualib/demo.lua'

no file '/usr/local/openresty/lualib/demo/init.lua'

no file './demo.lua'

no file '/usr/local/openresty/luajit/share/luajit-2.1.0-beta2/demo.lua'

no file '/usr/local/share/lua/5.1/demo.lua'

no file '/usr/local/share/lua/5.1/demo/init.lua'

no file '/usr/local/openresty/luajit/share/lua/5.1/demo.lua'

no file '/usr/local/openresty/luajit/share/lua/5.1/demo/init.lua'

no file '/usr/local/openresty/lualib/demo.so'

no file './demo.so'

no file '/usr/local/lib/lua/5.1/demo.so'

no file '/usr/local/openresty/luajit/lib/lua/5.1/demo.so'

no file '/usr/local/lib/lua/5.1/loadall.so'

stack traceback:

coroutine 0:

[C]: in function 'require'

content_by_lua(nginx.conf:69):2: in function , client: 192.168.99.1, server: , request: "GET /function HTTP/1.1", host: "192.168.99.100:8686"

修复

ADD demo.lua /usr/local/openresty/lualib/demo.lua

小结

从源码可以看出,基本是定义一个_M变量,里头有个_VERSION属性,然后定义_M的function,最后返回_M。另外注意自己定义的类库需要放在openresty查找的路径下面,否则会报错。

doc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值