首页 > 新闻 > 专家观点 >

《FreeSWITCH 1.2》:外部命令FreeSWITCH

2014-04-29 13:52:35   作者:   来源:CTI论坛   评论:0  点击:


  FreeSWITCH 事件系统是FreeSWITCH最有趣的模块之一。用户已经学习了如何使用各种静态配置维护和脚本语言来配合FreeSWITCH工作。事件系统实现了对FreeSWITCH实时动态的控制。使用了事件系统才使得FreeSWITCH变得更加有趣。

  事件系统支持外部的程序作为一个监听者来监听系统正在执行的的任何任务。通过外部监听的方式可以支持一个实时的互动,通信软交换系统的电话可以通过外部的软件或者已经进行对接。在FreeSWITCH环境中,几乎所有发生的指令可以生成一系列的事件信息。外部实体可以检测到这些事件。类似于在平台信息队列软件使用的publish/subscribe(或 "pub-sub")系统,这些事件机制已经调整来满足FreeSWITCH 事件系统的需求。

  事件系统是双向工作的:支持外部的程序来监听事件,然后外部程序可以对FreeSWITCH发送事件。用户可以通过自己的程序来实时地接收和发送事件。这样的组合方式可以实现大部分用户可以想象到的方式对FreeSWITCH进行外部控制。

  在这一章节,我们将讨论以下内容:

  · 事件系统的基本概要

  · 事件系统的架构

  · 访问事件套接字

  · 事件套接字库

  · 在PHP中使用ESL实例

  · 使用事件系统创建一个会议管理员

  概要

  事件系统是FreeSWITCH的神经中枢,支持本地软件或外部软件订阅在软交换系统中正在发生的任务流。在FreeSWITCH中,执行任何的任务会生成一个事件。接收一个新的电话呼叫会导致一个事件。结束一个呼叫同样也导致一个事件发生。对硬盘写入系统的日志会导致一个事件。甚至于讲话或者静音也会导致一个事件。每个事件变成了事件流的一个部分,事件流可以触发一个事件类型,事件类别和各种事件信息。对端软件可以监听这些事件,通过事件执行相应的任务,例如,通过TCP 套接字连接发送文本流。

  事件通过另外一种方式对FreeSWITCH提供一个功能扩展。事件不同于钩子或模块(在实时环境中,这些会影响处理和呼叫控制)。事件提供一个异步机制(或非阻塞/队列)来维持系统的任务跟踪。这些事件通过其他软件生成。在实际环境中,用户可以通过外部程序来控制系统中多个任务活动。

  在这样的例子中,用户系统可能突然有一个呼叫高峰,这个环境高峰可能生成新的事件。用户可以通过web浏览器来处理这些事件,但是浏览器不能马上应对这个呼叫量。使用队列事件系统,用户可以等待浏览器提高处理能力,来应对此时的呼叫量,避免核心软交换引擎的阻塞(自己阻塞呼叫)。

  在这个章节,我们将讨论事件系统几个不同的方面-从外部程序接收和处理事件和对FreeSWITCH发送事件。我们涵盖的模块包括,从外部启用事件系统,生成的事件类型和对事件类型调用的方法。最后,我们将了解一个实例使用场景和代码来帮助用户开启一个使用环境,通过自己的程序来控制FreeSWITCH。

  事件系统架构

  FreeSWITCH中的事件子系统支持以下两个方面的功能,一个是最大化的处理设计,另外一个是事件优先级设计,优先级取决于事件类型和事件系统加载结果。在FreeSWITCH的事件系统中包含两个层次的处理。第一层提供一个内部事件处理路由和一个吸纳FreeSWITCH自身内部事件的接口。第二层是一个模块架构,提供客户端对事件的访问。通过两个功能单元的分割独立,实现了publish/subscribe风格的事件系统。

  在内部的事件层,FreeSWITCH 提供了核心功能来处理发生在系统级别和通道级别的事件。系统的任何部分包括模块可以发布或广播事件。目前有两个核心类型事件-系统事件和日志事件。核心子系统部分或模块可以生成系统事件。他们包括从系统内部定时器心跳到会议子系统事件,例如会议一方加入或者离开会议室。每次一个日志写入到FreeSWITCH日志文件时,系统会生成一个

  日志事件。这些子系统实际上由三个事件队列组成,每个队列有自己的线程和优先级。如果一个队列被填满以后,系统将自动跳到下一个队列,直到全部事件系统被填满。当呼叫或者系统功能处于处理状态时,后端的线程会生成事件,这些事件保存到内存中等待内部的订阅者来调用。一旦订阅的模块或子系统提取了信息,这个事件信息将被消灭。通过这样的方式,事件系统的拓展性得到了提升,已经使用的事件立即清除,这样当事件用户等待提取队列事件时不会导致呼叫被阻塞。

  FreeSWITCH使用它的模块架构可以支持通过外部软件来处理事件。一个事件处理模块可以订阅内部事件信息,对其进行格式化,然后发送到外部程序。这样的模块称之为事件处理event handlers。FreeSWITCH没有绑定很多的event Handlers,但是这些event handlers功能非常丰富,处理能力强大。我们将再次回顾这些模块,学习如何使用这些模块。

  未完待续······

相关阅读:

分享到: 收藏

专题