首页 > 新闻 > 专家观点 >

《FreeSWITCH: VoIP实战》:嵌入式脚本

2012-08-22 11:06:12   作者:杜金房    来源:FreeSWITCH   评论:0  点击:


  非 Session 函数

  Lua 脚本中也可以使用跟 sesion 不相关的函数,最典型的是 freeswitch.consoleLog(),用于输出日志,如:

 freeswitch.consoleLog("NOTICE", "Hello lua log!\n")

  另外一个是 freeswitch.API,它允许你执行任意 API,如

 api = freeswitch.API();
 reply = api:executeString("sofia", "status");

  独立的 Lua 脚本

  独立的 Lua 脚本可以直接在控制台终端上(使用 luarun)执行,这种脚本大部分可用于执行一些非 Session 相关的功能,后面我们会讲到相关例子。

  数据库

  在 Lua 中,可以使用 LuaSQL 连接各种关系型数据库,但据说 LuaSQL 与某些版本的数据库驱动结合有内存泄漏问题,配置起来也比较复杂。

  另一种连接数据库的方式是直接使用 freeswitch.Dbh。它可以直接通过 FreeSWITCH 内部的数据库连接句柄来连接 sqlite 数据库或任何支持 ODBC 的数据库。下面是一个来自 FreeSWITCH wiki 的例子。

 local dbh = freeswitch.Dbh("dsn","user","pass") -- when using ODBC
 -- OR --
 -- local dbh = freeswitch.Dbh("core:my_db") -- when using sqlite

 assert(dbh:connected()) -- exits the script if we didn't connect properly

 dbh:test_reactive("SELECT * FROM my_table",
                   "DROP TABLE my_table",
                   "CREATE TABLE my_table (id INTEGER(8), name VARCHAR(255))")

 dbh:query("INSERT INTO my_table VALUES(1, 'foo')") -- populate the table
 dbh:query("INSERT INTO my_table VALUES(2, 'bar')") -- with some test data

 dbh:query("SELECT id, name FROM my_table", function(row)
   stream:write(string.format("%5s : %s\n", row.id, row.name))
 end)

 dbh:query("UPDATE my_table SET name = 'changed'")
 stream:write("Affected rows: " .. dbh:affected_rows() .. "\n")

 dbh:release() -- optional

  Javascript

  相对于 Lua, 大家可能对 Javascript 更熟悉一些。Javascript 是 Web 浏览器上最主流的编程语言,它最早是设计出来用于配合 HTML 渲染页面用的,近几年由于 Node.js 的发展使它在服务器端的应用也已发扬光大。它遵循 EMCAScript 标准。

  通过加载 mod_spidermonkey 模块可以使用 js 解析器,模块 mod_spidermonkey_odbc 则支持在 Javascript 脚本中连接 ODBC 数据库。

  除语法不同外,用法上与 Lua 类似,如使用 javascript (它是一个APP) 执行一个 session 相关的脚本,或 jsrun (它是一个API)执行一个非 session 相关的脚本。

  其它脚本语言

  其它脚本语言的使用也类似,读者可参照使用。值得一提的是,FreeSWITCH 有一个 mod_managed 模块支持 Windows .NET 架构下的语言(F#, VB.NET, C#, IronRuby, IronPython, JScript.NET),通过 mono 也可以支持其它平台(如 Linux )。


 

相关阅读:

分享到: 收藏

专题