Asterisk 1是基于GPLv2协议发布的一款开源电话应用平台。简单地说,这是一个服务端程序,用于处理电话的拨出、接入以及自定义流程。

一个人使用电话A呼叫另一个使用电话B的人。在此场景下,连接到Asterisk系统的有两个电话终端,因而分配了两个通道(如图1.2)。

图1.2 两个通道表示两条呼叫线路

媒体传输使用的是P2P方式!

图1.3 专用桥接实例

图1.4 通道技术层和抽象通道层

Asterisk组件抽象

Asterisk是一款高度模块化的软件。其内核程序可由源码树上的main/目录的源码构建而成。但是内核程序本身作用不大,因为其主要作用是注册模块。系统还有一些代码负责连接所有抽象接口,使电话呼叫工作起来。这些接口的具体实现是由一些可载入模块在运行时完成注册的。

默认状态下,当主程序启动时,Asterisk会在文件系统上一个预先指定的模块目录下找到所有模块,并加载之。选择这种默认方式是出于简便性的考虑。然而,还有一个可更改的配置文件,可具体指定加载哪些模块及其加载顺序。系统配置变得有点复杂,但是能指定那些不需要的模块不被加载。这样做的主要好处就是减少了程序的内存占用,然而还有一些安全性的优点。如果一个模块可从网络接受连接,但实际并不需要用它,那么最好还是不要加载它。

模块被加载后,它将在Asterisk内核程序中注册它所有组件抽象的实现。可由模块实现并在Asterisk内核注册的接口多种多样。系统允许模块尽量多的注册各类接口。通常相似的功能组成一个单独的模块。

Asterisk管理员使用Asterisk拨号计划(存于/etc/asterisk/extensions.conf文件)来设置呼叫路由表。拨号计划是由一系列被称为扩展规则的呼叫规则组成的。当有一个电话呼叫接入,系统用被叫号码在拨号计划中查找扩展规则,用以处理本次呼叫。(本质:DSL!)举例说明之前,我们先看一个Asterisk拨号计划的语法,此拨号计划用于处理对号码1234的呼叫。注意,这里1234这个号码系信手拈来。共有3个拨号程序被调用:首先,应答呼叫;其次,回放音频文件;最后,挂断呼叫。

; Define the rules for what happens when someone dials 1234. ; exten => 1234,1,Answer() same => n,Playback(demo-congrats) same => n,Hangup()

Asterisk的大多数线程可归类为网络监视线程或通道线程(有时亦称为PBX线程,因为其主要目的是在通道运行用户级交换机PBX)。

图1.7 普通呼叫桥接的组件图

迄今为止,Asterisk的架构已有十年以上的历史。然而,尽管这个行业在不断发展,Asterisk的一些东西,如通道的基本概念、使用拨号计划进行灵活的呼叫处理,仍然支持着复杂电话系统的开发。有一个领域Asterisk的架构还没有处理的太好,即如何使系统在多服务器间可伸缩。Asterisk开发社区正在开发一个叫做Asterisk SCF(可伸缩通信框架)的伙伴项目,目的就是解决可伸缩性的课题。

参考:http://www.ituring.com.cn/article/13057#

转载于:https://www.cnblogs.com/bonelee/p/6142383.html

开源软件架构总结之——Asterisk(DSL、组件、多线程)相关推荐

  1. 开源应用架构之asterisk

    作者:Russell Bryant 翻译:jiazhengfeng Asterisk[1]是一款GPLv2协议下的开源电话应用平台.简单来说,Asterisk是一个服务器应用,能够完成发起电话呼叫.接 ...

  2. 开源软件架构 zeromq

    原文链接:http://www.aosabook.org/en/zeromq.html ØMQ是一个消息通信系统,如果你愿意的话也可以称其为"面向消息的中间件".ØMQ的应用环境很 ...

  3. Work Time Manager【开源项目】- 创建自己日志组件 2.0重构

    这次我们真是开始来聊聊开源项目里,小而有用的模块或者组件的开发思想. 同时,软件已经更新到1.60的版本了,支持新用户注册,可以不再使用统一的test账户了. 您可以通过以下路径进行下载: 1.在Gi ...

  4. 腾讯开源基于 mmap 的高性能 key-value 组件 MMKV

    腾讯微信团队宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性.MMKV 从 2015 年中至今,在 ...

  5. 开源软件架构总结之——Bash(readline做输入交互式,词法语法分析,进程交互)...

    第3章 The Bourne-Again Shell Bash的主要组件:输入处理,解析,单词展开(word expansion)和其他命令处理,管道(pipeline)中的命令执行.这些组件构成一个 ...

  6. vue 字典_【开源】基于Vue的前端组件库HeyUI

    说道vue组件库,目前主流的基本就是iview和element.今天又发现一个很不错的.HeyUI. 组件也很丰富,入门比较简单. 反正开源框架我们有不嫌多,多多益善啊.感兴趣的可以看看. 关于Hey ...

  7. 开源的大文件上传组件NeatUpload™

    支持.net 1.1 .NET 2.0 这里是 live demo 很不容易发现的,在.net下面要找个开源的东西真是难也. 当然大文件上传有很多组件比如ABCUPLOAD SlickUpload不过 ...

  8. 金融行业开源软件研究评测报告——JSON组件

    背景 JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得JSON成为理想的数据交换语言.在业务系统中,JSON组件作为数据转换和处理的重要环 ...

  9. 《开源软件架构》--nginx配置与内部(三)

    14.3. nginx配置 nginx的配置系统灵感来自Igor Sysoev使用Apache的经验.他的主要观点是,可伸缩的配置系统对于web服务器非常必要.在维护包含大量虚拟服务器.目录.位置和数 ...

最新文章

  1. 【知识发现】隐语义模型LFM算法python实现(三)
  2. [C++]MySQL数据库操作实例
  3. 无连接网络通信程序UDP
  4. oracle ebs 期间 打开,ORACLE EBS重新打开关闭库存期间
  5. js空格占位符_灵活使用 console 让 js 调试更简单
  6. 随笔 --- 深夜反思、重定向
  7. poi导出excel
  8. AE效果:3D 通道
  9. 1.4多媒体技术的发展历史
  10. vscode设置中文流程
  11. BitTorrent详解
  12. xctf crackme
  13. matlab相对强度噪声,噪声强度(噪声功率)、SNR、dBW
  14. Algorithms, Part I by Kevin Wayne, Robert Sedgewick
  15. 全国通用 专升本计算机基础(简答题背诵可用)
  16. HDU - 6638
  17. Excel技巧 - Date函数日期转换
  18. 从普通回溯到三色标记法法
  19. 今日分享——点点小事对人的影响
  20. html text-decoration,text-decoration 属性

热门文章

  1. ffmpeg rtmp 封装发送函数_FFmpeg发送流媒体的命令(UDP,RTP,RTMP)
  2. python实现logistic_用Python实现机器学习算法—Logistic 回归算法
  3. spring mvc后端代码实现弹出对话框_Spring(3)——事务管理和MVC
  4. dataimagepng php_浅析data:image/png;base64的应用
  5. android 美颜,「照骗」要消失了?Android 11 或禁用自动美颜
  6. php数组转xml文件,php数组转换成xml格式的实现方法
  7. mysql sql模式_MySQL SQL模式特点汇总
  8. 字节Java高级岗:javaio流面试题
  9. 【深度学习】深度学习之对抗样本问题和知识蒸馏技术
  10. 解决Xshell 连不上ubuntu系统