前段时间研究erlang语言,所以对于freeswitch的可以成为erlang的一个节点,从而进行相互通信。
这里我就和大家分享下我对此模块的心得。
首先说说此模块的编译,在默认环境下次模块不会被编译,只有当你的主机安装了erlang vm时,再通过./confingure时,产生的配置文件才会把mod_erlang_event模块进行编译。
但是这还不够,你还需要在目录下的module.config的mod_erlang_event进行取消注释,这才会在编译的时候成功编译。
在说说此模块的加载,加载此模块时,此模块模块接收所有的event消息(event机制可以查看以前的文章),并读取mod_erlang_event.conf配置文件,读取主机名称、节点名称、通信名称,(注:thisalivename为erlang通信的进程名称)读取完成后把此信息设置的empd进程(此进程erlang运行时进程),再监听所有来自4369端口的连接请求,(绑定socket的ip也可以自行配置,默认为0.0.0.0(表示接受所有的ip)),自此此模块的启动则基本完成。
在说说模块主动外连节点,也就是指erlang的outbound接口。通过outbound接口向外节点发起连接时,首先会检查是否存在和向发起连接的节点的连接存在,如果和对端节点的连接不存在,则创建新的连接。当创建新的连接时,会调用erlang的erl接口模块的ei_connect接口,向对端节点发起一次连接(相当于erlang进程之间的ping操作),连接成后在则在erlang vm的net_kernel模块对此连接进行管理(其中包含定时器等等,这里不再描述),创建了一个连接后,fs为每一个连接创建了一个线程进行管理(目的为:防止网络通信的低速影响系统的运行速度),此listeners线程则对于接受到的event,通过ei接口发送给远端接口。
自此差不多描述了fs和erlang远端节点进行连接的大部分内容,如有不全之处,请自己结合代码和文档深入研究。