freeswitch系列六 freeswitch在拨号计划中通过lua实现对redis操作

2023-05-16

3种freeswitch访问redis方案的分析

由于项目的原因,需要在freeswitch的拨号计划中根据redis中特定key的值,判断后续的操作是转发请求或者播放录音。这里需要freeswitch中实现对redis的操作,目前实现的方案有三:

  1. 创建一个java工程服务,通过esl和freeswitch交互,在java工程实现从redis获取数据。此方案优点是灵活性强,功能强大。缺点是实现较复杂,为了一个简单的功能需要创建一个java服务,有点杀鸡用牛刀
  2. 通过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才被修复。我们生产环境的redis是带密码的,所以此方案不符合我们的要求
  3. freeswitch集成了lua,我们可以通过lua脚本实现对redis的操作,实现简单,功能较强大。这是我们最终的选择的方案。

本文会对第3个方案进行详细介绍。

freeswitch在拨号计划中通过lua实现对redis进行操作

安装lua5.2, luarocks

Freeswitch的安装环境为Debian 8 freeswitch1.6 默认集成的lua的版本5.2。不要使用apt-get安装,因为apt-get intall luarocks 这个默认安装出来的lua版本是5.1。所以我们源码安装lua5.2, luarocks。为了保证安装正确,我们最好在进行如下操作前,将系统自带的lua和luarocks通过apt-get删除。

安装lua5.2 下载安装包:wget www.lua.org/ftp/lua-5.2… 进入解压目录 ,执行如下命令:

apt-get install make  // make需要额外安装
make linux // 设置安装平台
make install // 执行安装
复制代码

安装luarocks 下载安装包:wget luarocks.github.io/luarocks/re…

进入解压目录 ,执行如下命令:

./configure; sudo make bootstrap
复制代码

执行命令luarocks,如果提示"Lua version: 5.2",则表示安装成功。如果这里提示是lua5.1,可以先卸载lua5.1,再安装lua5.2,重新执行以上安装步骤

...
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)
复制代码

配置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"/>
复制代码

安装 redis-lua插件

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

luarocks install redis-lua
复制代码

刷新配置

在fs_cli执行如下两条命令,刷新新的配置(如果在测试过程出现执行如下命令时,不能刷新配置,请重启freeswitch):

reloadxml 
reload mod_lua
复制代码

书写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)   
复制代码

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

lua /etc/freeswitch/script/test-pwd.lua
复制代码

在拨号计划中使用使用lua脚本,则配置脚本如下

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

复制代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

freeswitch系列六 freeswitch在拨号计划中通过lua实现对redis操作 的相关文章

  • 【软件工程导论-ZZU】02. 软件生命周期、开发过程与模型

    二 软件生命周期 开发过程与模型 1 软件生命周期 软件生命周期 xff1a 是软件的产生直到报废或停止使用的生命周期 实际从事软件开发工作时 xff0c 软件规模 类型 开发环境及技术方法等因素会影响到阶段划分 xff0c 及各阶段的执行
  • MySQL5.7安装与配置(YUM)

    安装环境 xff1a CentOS7 64位 xff0c MySQL5 7 1 配置YUM源 在MySQL官网中下载YUM源rpm安装包 xff1a http dev mysql com downloads repo yum span cl
  • ONOS高可用性和可扩展性实现初探

    为什么80 的码农都做不了架构师 xff1f gt gt gt ONOS 的发布直面OpenDaylight 进行挑战 xff0c 直接将 SDN 领域两大阵营 xff08 运营商和设备商 xff09 的竞争瞬间升级 xff0c 之所以 O
  • java a 运算_java中a++和++a在较复杂的运算中分析

    以下是一段普遍都了解的代码 xff1a public static void main String args int a 61 3 System out println a 43 43 43 1 4 System out println
  • Boom!!!计算机系统,从理解到爆炸,Bomblab

    进入目录下 bomb 开始运行炸弹 对于炸弹command not found之类的鬼畜情况 xff1a chmod 777 bomb 然后再运行炸弹 objdump d bomb gt bomb s 把整个代码打到文件里去 xff0c 也
  • 笔记本无法连接校园网,windows诊断显示校园网之未响应

    打开cmd xff08 管理员 xff09 xff1a 输入以下四条 xff0c 每一条都按enter ipconfig flushdns ipconfig registerdns ipconfig release ipconfig ren
  • 判断两个IP是否处于同一子网(网段)

    大学的时候有上过计算机网络的课程 xff0c IP这块也有一些接触 xff0c 但向来不是很好学的我 xff0c 对于一些问题似是而非的态度 xff0c 感觉知道 xff0c 但具体的又说不上 xff0c 今天就花了点时间彻底把这个问题搞清
  • zeromq发送文件到服务器,将zeromq套接字连接到redis服务器以进行数据传输?

    我想将服务器上的消息 ZMQ ROUTER套接字 xff0c 处理多个客户端 传输到redis服务器以用于存储目的 我听说 xff0c redis不会说ZMQ 所以如果不搭桥 xff0c 就不可能实现 我接受你的建议 在哪里看 xff1f
  • 历数NFV的发展历程

    随着网络产业正在通过SDN转型 xff0c NFV的互补架构概念越来越突出 为解释这种状况 xff0c 下文中将对NFV的定义 如何出现以及如何影响企业数据中心加以阐释 NFV的定义 维基百科对于NFV的定义是 xff1a NFV是使用虚拟
  • 线程相关知识

    线程的概念 1 xff0e 线程 1 线程是由表示程序运行状态的寄存器 包括程序计数器和堆栈 组成的 2 线程是程序执行过程中的某一时刻的状态 3 线程是一个用户级的实体 xff0c 在内存中驻留在普通用户级方法可以直接访问的区域 4 每个
  • 白盒交换机操作系统混战

    白盒交换机的出现给了用户选择最佳软硬件平台的权利 xff0c 它仅仅提供交换机硬件和ONIE xff08 开放网络安装环境 xff09 xff0c 用户可以自行选择最合适的交换机芯片 xff0c 降低成本实现最大效益 但是白盒交换机没有软件
  • Mysql修改设置root密码的命令及方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 方法一 xff1a 使用SQL语句命令UPDATE 需用到Mysql自带的加密函数PASSWORD string xff0c 该函数对一个明文密码进行加密 xff0c 但不
  • python中if有多个条件_Python if有多个条件怎么办

    Python中if有多个条件的处理方法 python中if有多个条件 可以使用and or elif关键字来连接 代码为 if name zs and age 18 print name zs age 18 Python中if有多个条件的处
  • linux查看openssl安装目录,linux如何使用openssl

    最近要做一个项目要用到openssl库 Linux里 无奈 xff0c 不得不安装openssl了 可是查了好多的资料都是一头雾水 xff0c 都不知道到底要是怎样才算是安装成功了 我的系统是 xff1a redhat xff0c 内核是
  • linux查看topic分区的数据量,如何查看Kafka的Topic消费情况

    温馨提示 xff1a 如果使用电脑查看图片不清晰 xff0c 可以使用手机打开文章单击文中的图片放大查看高清原图 Fayson的github xff1a https github com fayson cdhproject 提示 xff1a
  • AttackLab 这次我偷懒了

    这里有题解 xff0c 这里有题解 xff0c 这里有题解 迅速暴击上面一行 xff0c xff0c xff0c xff0c xff0c 感谢男神LJL 留几张图 第一次lab结束的时候还是12点之前 xff0c 感人 xff08 PS x
  • 与ajax相同的技术,AJAX是什么?都包含那些技术?

    AJAX的意思与包含的技术楼上的 亲 伱左脸 已经做出了回答了 xff0c 下面我就给你一点别的吧 xff0c 希望对你有所帮助 与传统的web应用比较 传统的web应用允许用户填写表单 form xff0c 当提交表单时就向web服务器发
  • asp网站 服务器iis 安全设置,Windows server 2008 R2 + IIS7.5,ASP网站设置

    1 让IIS7支持ASP Win2008 IIS7 默认不安装ASP xff0c 如果需要ASP 的支持 xff0c 需要将这个角色服务选上 2 相关设置 应用程序池 gt DefaultAppPool gt 高级设置 gt 启用32位应用
  • 服务器修改css,本地服务器修改css

    本地服务器修改css 内容精选 换一换 Windows Server 2012 R2操作系统弹性云服务器 xff0c 本地使用远程桌面连接功能连接云服务器并启用redirected drive功能时 xff0c 云服务器出现蓝屏 远程桌面连
  • RDS SQL Server 创建数据库关系图(Database Diagrams)

    背景介绍 SQL Server 关系图是一个非常简单易用且方便的工具 xff0c 可以直观的把数据库中表之间的关系展现出来 xff0c 不用手动整理或者写脚本整理各个表之间的关系 xff0c 如下图 RDS SQL Server 2008

随机推荐

  • MapReduce实战:自定义输入格式实现成绩管理

    1 项目需求 我们取有一份学生五门课程的期末考试成绩数据 xff0c 现在我们希望统计每个学生的总成绩和平均成绩 样本数据如下所示 xff0c 每行数据的数据格式为 xff1a 学号 姓名 语文成绩 数学成绩 英语成绩 物理成绩 化学成绩
  • 走心整理——十个常用深度学习算法

    十分抱歉 xff0c 由于项目太忙 xff08 我会说自己懒吗 xff1f xff09 柳猫一直没有更新自己的手记 xff0c 现在 xff0c 就让柳猫来讲讲十个常用的深度学习算法 过去十年里 xff0c 人们对机器学习的兴趣经历了爆炸式
  • Linux信号量操作次数的探究

    需求源于项目中一部分设计的代码 struct semaphore类型的信号量 xff0c 使用up 进行释放 xff0c down interruptible 和down 获得指定信号量 xff08 前者中 xff0c 若该信号量已争用则进
  • 编写简单的MapReduce程序(Hadoop2.2.0)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我们以简化版的气温统计为例 xff0c 演示如何开发一个MapReduce程序 Eclipse中新建一个MapReduce项目 xff0c 命名为MaxTemperatur
  • 【操作系统】trap,interrupt,和异常

    陷阱 计算机有两种运行模式 xff1a 用户态 xff0c 内核态 其中操作系统运行在内核态 xff0c 在内核态中 xff0c 操作系统具有对所有硬件的完全访问权限 xff0c 可以使机器运行任何指令 xff1b 相反 xff0c 用户程
  • PowerShell-数组的多种录入方法

    PS xff1a 这个需求是小骆驼发起的 感谢 微软云方案交流 236804566 这个高端群的用户贡献 我们首先看看一个标准的数组 是怎么录入的 PS D gt arr 61 34 adf 34 34 asdfer 34 34 sreds
  • vnc 端口修改、用户添加删除、批量启动停止

    2019独角兽企业重金招聘Python工程师标准 gt gt gt yum y install tiger server usr bin env bash config file 61 34 etc sysconfig vncservers
  • Docker命令详解

    最近学习Docker xff0c 将docker所有命令实验了一番 xff0c 特整理如下 xff1a docker help Usage docker OPTIONS COMMAND arg docker daemon help dock
  • rman备份rman-00554 ,rman-04005错误

    gt rman target 64 orac 到Oracle安装目录找到 network admin sqlnet ora文件 将SQLNET AUTHENTICATION SERVICES 61 NONE 修改为 SQLNET AUTHE
  • 码农学ODL之SDN入门篇

    本文作为码农学ODL系列的SDN基础入门篇 xff0c 分为两部分 第一部分 xff0c 主要讲述SDN是什么 xff0c 改变了什么 xff0c 架构是什么样的 xff0c 第二部分 xff0c 简要介绍如何去学习SDN 1 什么是SDN
  • CAS单点登录之mysql数据库用户验证及常见问题

    前面已经介绍了CAS服务器的搭建 xff0c 详情见 xff1a 搭建CAS单点登录服务器 然而前面只是简单地介绍了服务器的搭建 xff0c 其验证方式是原始的配置文件的方式 xff0c 这显然不能满足日常的需求 下面介绍下通过mysql数
  • 抽象类和接口的区别

    抽象类和接口的区别 一 抽象类 xff1a 抽象类是特殊的类 xff0c 只是不能被实例化 xff1b 除此以外 xff0c 具有类的其他特性 xff1b 重要的是抽象类可以包括抽象方法 xff0c 这是普通类所不能的 抽象方法只能声明于抽
  • 对本课程的期望

    希望自己能够通过对本课程的学习 xff0c 对C语言能有进一步的了解 xff0c 能够学会自主运用 xff0c 学习到经验技术和知识 xff0c 也希望老师能够在学习新知识时多讲解多运用 xff0c 反复练习 xff0c 以增加学生对新知识
  • 一篇文章带你搞懂JS对象的自我销毁

    在日常的JS组件开发中 xff0c 往往会有一些较为复杂的DOM操作及事件监听 xff0c 尤其是在处理UI层面的widgets时候更为明显 常常会花很多精力在对象的init上 xff0c 而当组件需要被移除时则仅仅是把所在DOM草草的re
  • LCA系列 hdu2587

    题http acm hdu edu cn showproblem php pid 61 2586 好久不写LCA了 span class hljs preprocessor include lt cstdio gt span span cl
  • AutoLISPDCL对话框设计

    AutoLISPDCL对话框设计 xff0c 代码如下 defun c viewdcl if null dcl pt setq dcl pt 39 1 1 setq dcl file getfiled 34 打开DCL文件 34 34 34
  • boost的asio接收单路大数据量udp包的方法

    开发windows客户端接收RTP视频流 xff0c 当h264视频达到1080P 60fps的时候 xff0c 按包来调用recvfrom的函数压力比较大 xff0c 存在丢包的问题 xff0c windows的完成端口的性能效果当然可以
  • Python Word2Vec使用训练好的模型生成词向量

    文本文件必须是utf 8无bom格式 from gensim models deprecated word2vec import Word2Vec model 61 Word2Vec load 39 model Word60 model 3
  • 使用dig或nslookup指定dns服务器查询域名解析

    一般来说linux下查询域名解析有两种选择 xff0c nslookup或者dig xff0c 而在使用上我觉得dig更加方便顺手 如果是在linux下的话 xff0c 只要装上dnsutils这个包就可以使用dig命令 安装bind ut
  • freeswitch系列六 freeswitch在拨号计划中通过lua实现对redis操作

    3种freeswitch访问redis方案的分析 由于项目的原因 xff0c 需要在freeswitch的拨号计划中根据redis中特定key的值 xff0c 判断后续的操作是转发请求或者播放录音 这里需要freeswitch中实现对red