淘先锋技术网

首页 1 2 3 4 5 6 7

本文主要记录如何在freeswitch的lua脚本中实现操作redis的环境搭建。

安装lua5.1

freeswitch V1.6默认集成的是lua5.1的版本,如果改用lua5.2的版本使用的时候会报如下的错误,具体原因不知道是什么:

2019-07-26 17:49:32.857665 [INFO] switch_cpp.cpp:1365 --123------TEST
2019-07-26 17:49:32.857665 [ERR] mod_lua.cpp:203 error loading module 'socket.core' from file '/usr/local/lib/lua/5.2/socket/core.so':
	/usr/local/lib/lua/5.2/socket/core.so: undefined symbol: luaL_setfuncs
stack traceback:
	[C]: ?
	[C]: in function 'require'
	/usr/local/share/lua/5.2/socket.lua:12: in main chunk
	[C]: in function 'require'
	/usr/local/share/lua/5.2/redis.lua:793: in function 'create_connection'
	/usr/local/share/lua/5.2/redis.lua:836: in function 'connect'
	/usr/local/freeswitch/scripts/test-pwd.lua:7: in main chunk
  1. 下载安装包:

    wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
    tar -zxvf lua-5.1.5.tar.gz
    cd lua-5.1.5
    
  2. 编译安装:

    # 设置安装平台,如果确实部分依赖库,直接通过yum install安装
    make linux
    # 执行安装
    make install
    

安装luarocks

  1. 下载安装包:

    wget http://luarocks.github.io/luarocks/releases/luarocks-2.4.4.tar.gz
    tar -zxvf luarocks-2.4.4.tar.gz
    cd luarocks-2.4.4
    
  2. 编译安装:

    ./configure; make bootstrap
    
  3. 版本确认:

    # 执行命令
    luarocks
    # 出现如下提示说明版本正常
    ...
    CONFIGURATION
            Lua version: 5.1
            Configuration files:
                    System: /usr/local/etc/luarocks/config-5.1.lua (ok)
                    User  : /root/.luarocks/config-5.1.lua (not found)
    

安装redis-lua插件

redis-lua插件封装了对redis操作,redis-lua用法详细见官网

luarocks install redis-lua

配置FreeSWITCH的lua

配置autoload_configs/lua.conf.xm,配置so和lua文件的目录(这里路径是luarocks控件的.lua和.so的保存位置)。

<param name="module-directory" value="/usr/local/lib/lua/5.1/?.so"/>

<param name="script-directory" value="/usr/local/share/lua/5.1/?.lua"/>

重启刷新FreeSWITCH配置,因为mod_lua模块不能reload。

书写lua脚本,配置到freewitch的拨号计划

test-pwd.lua

freeswitch.consoleLog("INFO", "--123------TEST")
local redis = require 'redis'
local params = {
    host = '127.0.0.1',

    port = 6379
}
local client = redis.connect(params)
client:auth("your_password")

freeswitch.consoleLog("INFO", "--------TEST connect")
local value = client:get("foo")
freeswitch.consoleLog("INFO", value)

在fs_cli执行lua脚本,执行成功:

lua test-pwd.lua

在拨号计划中使用使用lua脚本:

<action application="lua" data="test-pwd.lua"/>