文章目录

  • 核心
  • 数据库
  • 模块
  • 终点
  • 拨号计划
  • 编解码器
  • 语音识别
  • 文件格式
  • 日志
  • 嵌入式语言
  • 事件套接字
  • 目录结构


FreeSWITCH 使用线程模型来处理并发请求,每个连接都在单独的线程中进行处理。这不仅能提供最大强度的并发,更重要的是,即使某路电话发生问题,也只影响到它所在的线程,而不会影响到其它电话。FreeSWITCH 的核心非常短小精悍,这也是保持稳定的关键。所有其它功能都在外围的模块中。模块是可以动态加载(以及卸载)的,在实际应用中可以只加载用到的模块。外围模块通过核心提供的 Public API 与核心进行通信,而核心则通过回调机制执行外围模块中的代码。

核心

FS Core 是 FreeSWITCH 的核心,它包含了关键的数据结构和复杂的代码,但这些代码只出现在核心中,并保持了最大限度的重用。外围模块只能通过 API 调用核心的功能,因而核心运行在一个受保护的环境中,核心代码都经过精心的编码和严格的测试,最大限度地保持了系统整体的稳定。

核心代码保持了最高度的抽象,因而它可以调用不同功能,不同协议的模块。同时,良好的 API 也使得编写不同的外围模块非常容易。

数据库

FreeSWITCH 的核心除了使用内部的队列、哈希表存储数据外,也使用外部的 SQL 数据库存储数据。当前,系统的核心数据库使用 SQLite,默认的存储位置是 db/core.db 。 使用外部数据库的好处是–查询数据不用锁定内存数据结构,这不仅能提供性能,而且降低了死锁的风险,保证了系统稳定。命令 show calls、show channels 等都是直接从数据库中读取内容并显示的。由于 SQLite 会进行读锁定,因此不建议直接读取核心数据库。

系统对数据库操作做了优化,在高并发状态时,核心会尽量将几百条 SQL 一齐执行,这大大提高了性能。但在低并发的状态下执行显得稍微有点慢,如一个 channel 已经建立了,但还不能在 show channels 中显示;或者,一个 channel 已经 destroy 了,还显示在 show channels 中。但由于这些数据只用于查询,而不用于决策,所以一般没什么问题。

除核心数据库外,系统也支持使用 ODBC 方式连接其它数据库,如 PostgreSQL、MySQL等。某些模块,如 mod_sofia、mod_fifo等都有自己的数据库(表)。如果在 *nix 类系统上使用 ODBC,需要安装 UnixODBC,并进行正确的配置,如果编译安装的话还需要开发包 unixodbc-devel(CentOS) 或 unixodbc-dev(Debian/Ubuntu)。由于 PostgreSQL、MySQL 等都是 Client-Server 的结构,因此,外部程序可以直接查询数据(但需要清楚数据的准确性,可能会比 FreeSWITCH 核心中的数据有所滞后)。

模块

FreeSWITCH 主要分为以下几个部分:

终点

End Points 是终结 FreeSWITCH 的地方,也就是说再往外走就超出 FreeSWITCH 的控制了。它主要包含了不同呼叫控制协议的接口,如 SIP, TDM 硬件,H323 以及 Google Talk 等。这使得 FreeSWITCH 可以与众多不同的电话系统进行通信。如,可以使用 mod_skypopen 与 Skype 网络进行通信。另外,前面也讲过,它还可以通过 portaudio 驱动本地声卡,用作一个软电话。

拨号计划

Dialplan 主要是为了查找电话路由,主要的是 XML 描述的,但它也支持 Asterisk 格式的配置文件。另外它也持 ENUM 查询。

XML 接口
XML Interface 支持多种获取 XML 配置的方式,它可以是本地的配置文件,或从数据库中读取,甚至是一个能动态返回 XML 的远程 HTTP 服务器。

编解码器

FreeSWITCH 支持最广泛的 Codec,除了大多数 VoIP 系统支持的 G711、G722、G729、GSM 外,它还支持 iLBC,BV16/32、SILK、CELT等。它可以同时桥接不同采样频率的电话,以及电话会议等。

语音识别

支持语音自动识别(ASR)及文本-语音转换(TTS)。

文件格式

支持不同的声音文件格式,如 wav,mp3等。

日志

日志可以写到控制台、日志文件、系统日志(syslog)以及远程的日志服务器。

嵌入式语言

通过 swig 包装支持多种脚本语本语言控制呼叫流程,如 Lua、Javascript、Perl等。

事件套接字

使用 Event Socket 可以使用任何其它语言通过 Socket 方式控制呼叫流程、扩展 FreeSWITCH 功能。

目录结构

在 *nix 类系统上,FreeSWITCH 默认的安装位置是 /usr/local/freeswitch,在 Windows 上可能是 C:\freeswitch,目录结构大致相同

bin         可执行程序
db          系统数据库(sqlite),FreeSWITCH 把呼叫信息存放到数据库里以便在查询时无需对核心数据结构加锁
htdocs      HTTP Web srver 根目录
lib         库文件
mod         可加载模块
run         运行目录,存放 PID
sounds      声音文件,使用 playback() 时默认的寻找路径
grammar     语法
include     头文件
log         日志,CDR 等
recordings  录音,使用 record() 时默认的存放路径
scripts     嵌入式语言写的脚本,如使用 lua()、luarun()、jsrun 等默认寻找的路径
storage     语言留言(Voicemail)的录音
conf        配置文件,详见下节

11-FreeSwitch-freeswitch架构相关推荐

  1. 第一章 FreeSWITCH 的架构

    FreeSWITCH 的架构 欢迎来到FreeSWITCH的世界!如果您正在阅读本书,那么您可能对这些事务感兴趣:实时通信.WebRTC.电信.VoIP.Freeswitch是一个完整的应用服务器和一 ...

  2. 九年双11云化架构演进和升级,打造更加完美的双11

    摘要: 12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的<2017阿里巴巴双11技术十二讲>顺利结束,集中为大家分享了2017双11背后的黑科技.本文是<阿里巴巴云化架构创 ...

  3. jeecg社区第11期导师架构学习班开始报名了

    第11期导师架构学习班开始报名 我们社区开展一个师徒性质的培训班,深入学习java架构.类似大学导师带研究生的学习模式,适合在职者.导师给学生安排课题.分享视频资料,学生通过参考资料学习并完成作业.我 ...

  4. 2012年下半年11月份系统架构设计师上午试题答案之一

    2012年下半年11月份系统架构设计师上午试题答案之一 试题一:企业资源三大流 企业的所有资源包括三大流:物流.资金流和信息流. 试题二:企业信息化方法 1. 业务流程重构法: 2. 核心业务应用法: ...

  5. 阿里双11高可用架构演进之路

    阿里巴巴平台的业务规模在过去的8年呈指数级增长,给双11所带来的技术挑战是世界性的,特别是如何在零点峰值到来时确保系统的稳定性.零点技术挑战的本质是用有限的成本去实现最大化的集群整体吞吐能力和最佳的用 ...

  6. 【LiveVideoStack线上分享】— FreeSWITCH核心架构与流程控制

    FreeSWITCH是一个开源的软交换系统,支持PSTN通话.支持WebRTC.支持基于IP和5G的视频通话和视频会议,并提供开放的API. 今晚7:30 ,我们邀请到了FreeSWITCH 中文社区 ...

  7. FreeSWITCH 总体架构

    [1]总体结构 [2]代码结构目录 [3]模块简介 Applications应用 mod_abstraction – 提供了一个抽象的API调用(未来有更多功能)Provides an abstrac ...

  8. 搭建“双11”大型网站架构必须掌握的 5 个核心知识

    2019独角兽企业重金招聘Python工程师标准>>> 每年电商双11大促对背后技术人都是一次大考,阿里数据库团队表示.经过9年的发展,双11单日交易额从2009年的0.5亿一路攀升 ...

  9. 淘宝应对双11的技术架构分析

    双"11"最热门的话题是TB ,最近正好和阿里的一个朋友聊淘宝的技术架构,发现很多有意思的地方,分享一下他们的解析资料: 淘宝海量数据产品技术架构 数据产品的一个最大特点是数据的非 ...

  10. 支撑支付宝双11的核心架构

    现在还依稀记得去年双11在支付宝作战室,接近0点的时候,所有人都盯着值班室的秒级监控大盘,当交易峰值曲线慢慢爬升,最后变得无比陡峭,值班室的同学都很激动,欢呼声伴随着爬升的曲线达到了顶峰,58.3万笔 ...

最新文章

  1. 编写自己的Shell解释器
  2. 安卓 激活应用组件 intent
  3. 原代脂肪细胞提取的准备内容
  4. boost::python::long_相关的测试程序
  5. python在txt中的替换数据清洗_数据清洗过程中常见的排序和去重操作
  6. 径向基(RBF)神经网络
  7. 超全十大经典排序算法及其分析
  8. Confluence 6 从外部目录中同步数据支持的目录类型
  9. jsonarray转liast_fastjson List转JSONArray以及JSONArray转List
  10. Java多线程:线程池
  11. php+堆排序算法,PHP实现排序堆排序(Heap Sort)算法
  12. 【报告分享】转变与机遇:从京东大数据看2020消费市场与品牌成长.pdf(附下载链接)...
  13. 修改Docker镜像源地址为网易镜像源地址
  14. oracle pl sql面试题,SQL面试:PL/SQL面试问题和答案大全
  15. matlab电机仿真 pdf,现代永磁同步电机控制原理及MATLAB仿真 pdf+随书仿真模型
  16. R语言笔记:机器学习【K近邻】
  17. 程序员分哪几种?分别要学什么知识?工资怎么样?
  18. 恐怖呀,恐怖....
  19. flowable工作流简单请假流程,自定义完成的流程图表颜色字体以及连接线的颜色字体。
  20. 文献阅读经验--以基于深度学习的医学图像配准为例

热门文章

  1. 红米note5系统Android11,红米Note5 MIUI11 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
  2. 服务器连接电脑显示屏花屏怎么解决,电脑显示器花屏怎么办 电脑显示器花屏解决方法【详解】...
  3. c++采集声卡输出_windows上面捕获声卡数据
  4. Idea中 webservice 的调用
  5. Python抓取行政区域划分存入MySQL数据库
  6. macbook视频格式转换_Mac视频格式转换器:6款最好的免费工具
  7. 苹果平板计算机音乐,iphone、ipad上传照片、视频、音乐到电脑中 手机电脑互传文件...
  8. 学习matlab(十四)——GUI
  9. 天宫初级认证答案_百度初级认证考试题(附答案)
  10. sql server2000的1433端口不通怎么办