最后更新:2022-07-11 05:24:00 手机定位技术交流文章
本文主要对freesiwtch ESL做一个简要介绍,ESL全称Event Socket Libray是freeswitch中一组socket的函数库。
首先要了解ESL,你需要了解Eevent Socket是什么,Event Socket可以使运行在freeswitch外部的程序控制freeswitch, 可以使用socket的方式使用freeswitch提供的所有API和App,因为几乎几乎任何语言都支持socket,因此它几乎可以与任务语言进行通信。
换句话说,Event Socket实际上是一个 Socket,还有TCP协议,Event Socket只是一个自由开关特定的TCP定制接口。并且Event Socket只提供外部TCP接口,允许外部调用内部自由交换器提供的应用程序和API。
随着上述介绍,ESL变得更简单,ESL是Event Socket的包库集,是一个实现集。
Event Socket分成两种模式,内连模式(Inbound)和外连模式(Outbound)。这里所说的内和外是针对freeswitch而言的。
外部连接模式:作为TCP客户端的自由交换,而用户程序作为一个TCP Client连接到freeswitch。TCP服务器做什么,事实上,TCP服务器需要用户实现自己,建立连接后,freeswitch会将会话Channel的所有消息都发送给TCP Server, TCP Server可以决定是不是干预通电话,任何时候都可以干预.
内连模式:freeswitch作为一个TCP Server,而用户程序作为一个TCP Client连接到freeswitch。用户程序可以通过事件订阅获取freeswitch的各种状态。
ESL协议与HTTP协议或SIP协议类似,它是在TCP上的一种协议。这里是通过一些ESL命令对ESL协议的简要介绍。
在centos7.6下安装telnet命令,使用telnet连接到FreeSwitch8021在港口,尝试一些简单的命令,例如api version、api status等,如下:
auth命令验证密码, ClueCon是event_socket.conf.xml中配置的默认密码。
通过api version、api status可以大致了解,ESL协议的格式如下:
请求请求:
command <参数>
Content-Type: text/plain
Content-Length: 消息体长度
<消息体>
答复:
Content-Type:[text/plain | command/replay | api/response | text/event-plain | text/event-xml
| text/event-json
Content-Length: 消息体长度
<消息体>
以下是一些常见的ESL命令的简单介绍:
apiapi命令用于执行freeswitch内部api或app,是同步执行的,freswitch内部api或app未执行完成,api命令不会返回。
bgaip它与API命令类似,但执行方式不同步,不需要等待自由开关内部API或应用程序执行完成,并且可以立即删除。
event [plain | xml | json] event_nameevent命令用于订阅freeswitch的各种事件, 分别支持plain文本类型、xml类型和json类型的事件数据模式返回。
订阅所有事件:
加入普通事件命令的例子:
订阅自定义事件命令例:
其中CUSTOM是所有自定义事件的事件名称, my_custom_event_1是subclass,所有自定义事件都必须有subclass,而且不能相同。
noevent/nievent取消订阅事件,例如:
ESL是Event Socket的包装库。理论上,只要一个语言支持Socket,就可以实现ESL。已知的ESL支持语言包括C、Perl、PHP、Python、Ruby、Lua、Java、JavaScript、Tcl和C#、VB。
下面的文章将显示JS和C语言中的ESL使用例子,请等待。
本文简要介绍了ESL, 并分别介绍了Event Socket、ESL协议和ESL命令.
本文由 在线网速测试 整理编辑,转载请注明出处。