软交换freeswitch系统概要和源代码分析初步
asterisk与freeswitch的比较:
1:Asterisk是针对1百人以下的小型系统,相同的硬件配置下单系统最多并发200路,而根据国外爱好者测试freeswitch可达到2000-3000路sip通道(媒体流并发)。
2:Asterisk用动态链表来管理每个打开的通道,这样在多线程中非常难于管理(需要频繁的锁定和解锁)。而freeswitch每个呼叫通道都会用一个线程来管理呼叫状态,大大减少了死锁发生的几率。
3:Asterisk用DUNDi协议设计分布式系统。Fs使用外部数据库实现分布系统,做得更好,甚至可以一台服务器通过数据库注册到另一台服务器上。
4:freeswitch支持很多操作系统如linux,windows,Max OS X, BSD ,Solaris (包括 32 and 64 位平台)。asterisk基本只支持linux/unix。
基础知识需求
C/c++编程, c#,socket编程 ,sip,XML(fs的配置,呼叫规则和数据都是通过xml保存的),脚本语言JavaScript,lua,pcre(perl)。数据库sqlite,mysql。
系统编程知识:多进程线程同步(临界区,互斥量,信号灯,事件),APR,模块动态共享机制。
系统分析初步:
1:APR(系统集成的版本版本1.2.8,最新是1.3.8),分析其源代码的时候,需要掌握:内存池,事件机制,文件处理,进程和线程管理 。APR的主要目的是为应用提供一个可移植的、平台无关的层。它使用底层的、交叉平台的库来提供文件系统访问、网络编程、进程和线程管理以及共享内存等功 能。
2: Freeswitch是个高度模块化的程序,对于windows版本,其模块在mod目录下,基本上为mod_***.dll的格式。mod_opal 是h323支持,mod_iax.dll是asterisk的协议IAX的支持模块。大部分模块可以在系统运行的时候动态加载和卸载。
3:对freeswitch的控制都集中在conf目录下的那些xml文件。
4:freeswitch运行的时候,其核心是以信号量和事件来驱动的,核心维持一些(3个)事件队列,分别有专门的线程对发生的事件进行处理。