FreeSWITCH折騰筆記5——freeswitch在撥號計劃中通過lua實現對redis操作

3種freeswitch訪問redis方案的分析

由于項目的原因,需要在freeswitch的撥號計劃中根據redis中特定key的值,判斷后續(xù)的操作是轉發(fā)請求或者播放錄音。這里需要freeswitch中實現對redis的操作,目前實現的方案有三:

創(chuàng)建一個java工程服務,通過esl和freeswitch交互,在java工程實現從redis獲取數據。此方案優(yōu)點是靈活性強,功能強大。缺點是實現較復雜,為了一個簡單的功能需要創(chuàng)建一個java服務,有點殺雞用牛刀

通過mod_hiredis模塊對redis進行操作。此方案中可以直接在撥號計劃使用mod_hiredis,(用法如下:<action application="set" data="redisValue=${hiredis_raw default get Callers}"/>)。但是這個模塊有個bug,在freeswitch 1.6版本中mod_hiredis不支持password參數,即mod_hiredis只能連接沒有密碼的redis。這是freeswitch的一個bug,直到freeswitch 1.8版本此bug才被修復。我們生產環(huán)境的redis是帶密碼的,所以此方案不符合我們的要求

freeswitch集成了lua,我們可以通過lua腳本實現對redis的操作,實現簡單,功能較強大。這是我們最終的選擇的方案。

本文會對第3個方案進行詳細介紹。

freeswitch在撥號計劃中通過lua實現對redis進行操作

安裝lua5.2, luarocks

Freeswitch的安裝環(huán)境為Debian 8

freeswitch1.6 默認集成的lua的版本5.2。不要使用apt-get安裝,因為apt-get intall luarocks 這個默認安裝出來的lua版本是5.1。所以我們源碼安裝lua5.2, luarocks。為了保證安裝正確,我們最好在進行如下操作前,將系統(tǒng)自帶的lua和luarocks通過apt-get刪除。

安裝lua5.2

下載安裝包:wget http://www.lua.org/ftp/lua-5.2.4.tar.gz

進入解壓目錄 ,執(zhí)行如下命令:

apt-get install make? // make需要額外安裝

make linux // 設置安裝平臺

make install // 執(zhí)行安裝123

安裝luarocks

下載安裝包:wget http://luarocks.github.io/luarocks/releases/luarocks-2.4.4.tar.gz

進入解壓目錄 ,執(zhí)行如下命令:

./configure; sudo make bootstrap1

執(zhí)行命令luarocks,如果提示”Lua version: 5.2”,則表示安裝成功。如果這里提示是lua5.1,可以先卸載lua5.1,再安裝lua5.2,重新執(zhí)行以上安裝步驟

...

CONFIGURATION

? ? ? ? Lua version: 5.2

? ? ? ? Configuration files:

? ? ? ? ? ? ? ? System: /usr/local/etc/luarocks/config-5.2.lua (ok)

? ? ? ? ? ? ? ? User? : /root/.luarocks/config-5.2.lua (not found)123456

配置freeswitch的lua

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

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

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

安裝 redis-lua插件

redis-lua插件封裝了對redis操作,redis-lua用法詳細見官網

luarocks install redis-lua1

刷新配置

在fs_cli執(zhí)行如下兩條命令,刷新新的配置(如果在測試過程出現執(zhí)行如下命令時,不能刷新配置,請重啟freeswitch):

reloadxml

reload mod_lua12

書寫lua腳本,配置到freewitch的撥號計劃

test-pwd.lua

此腳本功能訪問redis,并獲取一個值,并打印

freeswitch.consoleLog("INFO", "--123------TEST")

local redis = require 'redis'

local params = {

? ? host = '127.0.0.1',

? ? port = 6999

}

local client = redis.connect(params)

client:auth("password")

freeswitch.consoleLog("INFO", "--------TEST connect")

local value = client:get("open_flag")

freeswitch.consoleLog("INFO", value)? 1234567891011

在fs_cli執(zhí)行l(wèi)ua腳本,執(zhí)行成功

lua /etc/freeswitch/script/test-pwd.lua1

在撥號計劃中使用使用lua腳本,則配置腳本如下

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

---------------------

本文來自 hry2015 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/hry2015/article/details/81583890?utm_source=copy

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容