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

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#

时间: 2024-12-28 15:52:06

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

我的开源框架之交互控制、组件通用工具封装

需求: (1)后期的jquery组件具有一些通用的需求,如ajax请求,数组的处理等 (2)从系统UI与服务器集成的角度看,一个系统的前端交互需要做一个统一的封装来接受用户交互,同时统一于服务器的请求 (3)前端的日志功能需要统一 (4)统一的验证入口 (5)综上:我们需要一个封装了通用表单操作(表单转对象,对象填充到表单,打开一个窗口),封装系统前端的统一ajax交互,ajax交互返回格式统一以便做统一处理. 初步代码实现(后期将会根据实际需求调整) 1 /******************

.NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器学习算法以及提供计算机视频.音频.信号处理以及统计应用相关的解决方案.该项目使用C#语言编写,项目主页:http://accord-framework.net/ 说明:该文章只是一个基本介绍,主要内容是翻译的官方文档和介绍,部分英文表述个人能力有限,不太熟悉,所以直接照搬原文,有比较确切的知道中文名

<摘录>开源软件架构-ZeroMQ

原文链接:http://www.aosabook.org/en/zeromq.html ØMQ是一个消息通信系统,如果你愿意的话也可以称其为“面向消息的中间件”.ØMQ的应用环境很广泛,包括金融服务.游戏开发.嵌入式系统.学术研究以及航空航天等领域. 消息通信系统完成的工作基本上可看作为负责应用程序之间的即时消息通信.一个应用程序决定发送一个事件给另一个应用程序(或者多个应用程序),它将需要发送的数据组合起来,点击“发送”按钮就行了——消息通信系统会搞定剩下的工作. 不同于即时消息通信的是,消息

一个技术汪的开源梦 —— 基于 .Net Core 的组件 Nuget 包制作 & 发布

微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布. 之前 .Net Framework 程序集打包 Nuget 有以下方法: 1. 使用命令  nuget pack  详见博客园的一篇博文 <用命令行工具创建 Nuget 程序包>: 2. 使用 NuGet Package Explorer: 3. vs 插件 NuBuild Project System.

.NET平台开源文档与报表处理组件包括Execel PDF Word等

在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台处理文档相关的开源组件.文档处理在开发中是一个非常常见的任务了,例如导出Excel,导出Word,生成PDF报表等等.那今天就看看下面这些.NET开源项目你知道不?如果有用,千万不要忘记推荐哦.同时个人能力有限,希望大家补充. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 本文原文地

做一个开源的小程序登录模块组件(token)

先了解下SSO 对于单点登陆浅显一点的说就是两种,一种web端的基于Cookie.另一种是跨端的基于Token,一般想要做的都优先做Token吧,个人建议,因为后期扩展也方便哦. 小程序也是呢,做成token的形式是较好的. 流程图 PS:图中4的文字打错了~ 1.启动服务 2.小程序初次加载app.js校验token,使用code去换取token 3.检测User信息是否存在code,不存在则注册新用户,最后返回对应用户Id 4.将随机Token与UserId一起存入Redis中 5.返回To

XUtils开源框架的使用(HttpUtils支持多线程断点续传)

XUtils项目下载地址:https://github.com/wyouflf/xUtils XUtils中包含的四大模块: 1.DbUtils模块 2.ViewUtils模块 3.HttpUtils模块: 支持同步,异步方式的请求: 支持大文件上传,上传大文件不会oom: 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求: 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件

开源框架、控件、组件记录

1.graphsharp Graph# is a graph layout framework.It contains some layout algorithms and a GraphLayout control for WPF applications. https://graphsharp.codeplex.com/ 2.QuickGraph QuickGraph 3.6: Generic Graph Data Structures and Algorithms for .NET. Qu

【高德LBS开源组件大赛】Android目的地雷达

开源组件名称 目的地雷达 开元组件说明及使用场景 使用高德地图查找目的地,获得经纬度后,计算自身与这些位置之间的距离,并显示在屏幕上.适用于需要得到自身与目的地之间距离的直观信息的场景. 开源组件所使用的技术 1,高德地图. 2,Camera预览. 3,地理位置与距离的换算. 4,方向传感器的使用. Git代码托管地址 https://git.oschina.net/greatleghair/walker/tree/master/Walkers 开源组件截图以及安装二维码 注:其实第三张图片的背