FastAGI Protocol
FastAGI基于AGI通过TCP/IP Socket连接替代标准输入和标准输出做为沟通的媒介。你可以使用FastAGI运行Java应用程序(可以在不同的机器上运行Asterisk) ,它仅启动一次AGI 脚本直到它被关闭。使用此协议结合Java的多线程支持可以构建非常快的脚本。
一个简单的实现如下,通过拨打1300分机调用AGI脚本,能听到welcome的语音。该实现共分4部分:
- AGI脚本实现代码:继承BaseAgiScript基类,并在service方法中实现具体的功能调用;
- 拨号计划:在拨号计划中定义AGI的调用;
- AGI脚本映射:定义AGI脚本名称与具体Java实现间的映射关系;
-
AgiServer:AGI服务端,通过启动该服务,将创建一个Socket服务端开放AGI服务,同时载入fastagi-mapping中的定义,以提供给AGI应用进行调用;
HelloWorld
import org.asteriskjava.fastagi.AgiChannel;
import org.asteriskjava.fastagi.AgiException;
import org.asteriskjava.fastagi.AgiRequest;
import org.asteriskjava.fastagi.BaseAgiScript;
public class HelloAgiScript extends BaseAgiScript
{
public void service(AgiRequest request, AgiChannel channel)
throws AgiException
{
// Answer the channel...
answer();
// ...say hello...
streamFile("welcome");
// ...and hangup.
hangup();
}
}
extensions.conf
[default]
...
exten => 1300,1,Agi(agi://192.168.0.100/hello.agi)
fastagi-mapping.properties
hello.agi = HelloAgiScript
最终的目录结构
$ ls -l
-rw-r--r-- 1 srt srt 163689 2005-03-11 22:07 asterisk-java.jar
-rw-r--r-- 1 srt srt 26 2005-03-11 20:50 fastagi-mapping.properties
-rw-r--r-- 1 srt srt 624 2005-03-11 22:07 HelloAgiScript.class
-rw-r--r-- 1 srt srt 438 2005-03-11 20:50 HelloAgiScript.java
启动服务
$ java -jar asterisk-java.jar
服务配置
通过修改fastagi.properties可更改DefaultAgiServer的默认值
bindPort = 1234 #Socket端口
poolSize = 20 #并发数(线程数)
注意事项
- 您编写的AgiScript必须是线程安全的
- 线程池最大线程数为100,即时你配置超过100也只能并发100个
分享到:
相关推荐
The Asterisk-Java package consists of a set of Java classes that allow you to... Asterisk-Java supports both interfaces that Asterisk provides for this scenario: The FastAGI protocol and the Manager API.
在IT行业中,拧紧枪OP协议控制OpenProtocol是一种专用于无线拧紧工具的开放式通信协议。这个协议的设计目的是为了高效、精确地控制和监控拧紧工具的运行状态,确保在汽车制造、航空航天和其他精密工程领域中的螺纹...
C语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOLC语言头文件 PROTOCOL...
Protocol Buffers是Google开发的一种数据序列化协议,用于结构化数据的序列化,可以视为一种跨平台、跨语言的数据交换格式。它允许开发者定义数据结构,然后生成代码以轻松地在各种数据流之间读写这些数据。Protocol...
在IT行业中,URLProtocol协议是一种自定义协议处理方式,它允许开发者扩展Windows系统对URL的解析功能,使得系统能够识别并处理自定义的协议类型,比如`myurl:`。这通常用于实现特定软件的内部链接或者集成不同应用...
使用URL Protocol实现网页调用本地程序,通过不同参数,可进行不同操作,简单测试版。 在浏览器无法调用本地资源,项目需要网页打开本地excel,而进行URL Protocol研究测试。 无法编辑下载需要的分数,很抱歉。 所有...
libsignal-protocol-javascript示例有关“如何使用libsignal-protocol-javascript ?”的示例组件server.js index.html和scripts怎么跑使用以下节点运行服务器: node server.js 。 (我认为只需要ws ) 在浏览器中...
### Protocol_Buffer官网文档中文版知识点总结 #### 一、简介与概览 - **Protocol Buffer**是一种用于数据序列化的高效工具,支持多种编程语言(如Java、C++、Python等),能够实现数据的有效存储和传输。 #### ...
《OpenProtocol_Specification_》是一份详细的技术规范文档,它主要介绍了PF4000开放协议Atlas以及OpenProtocol协议的报文格式和使用方法。PF4000是阿特拉斯·科普柯(Atlas Copco)工业技术公司推出的一套工业通讯...
标题与描述中提到的“Google Protocol Buffers”,通常简称为Protobuf,是Google开发的一种数据交换格式,它具有高效、简洁、自动化的特性。Protocol Buffers可以将结构化数据序列化,可用于网络通信和数据存储等...
标题“OpenProtocol-MTF6000”指向了一种特定的技术协议,即Open Protocol,它被应用于阿特拉斯·科普柯(Atlas Copco)的MTF6000控制器产品中。Open Protocol是一种工业通信协议,专为自动化装配线和机器人工具控制所...
ADASIS v3 Protocol v3.1.0 英文版本知识点 标题解释 本文档的标题是"ADASIS v3 Protocol v3.1.0 英文版本”,它表明了本文档的主题是关于ADASIS v3 Protocol的规范说明,版本号为v3.1.0,并且是英文版本。 描述...
根据提供的文件内容,知识点可以围绕阿特拉斯·科普柯工业技术集团发布的《OpenProtocol Specification R 2.10.0》文档展开。该文档详细描述了一种名为“OpenProtocol”的开放式通信协议,专门应用于电枪设备和工业...
OpenProtocol纯手写源码实例 /// /// 初始化连接 /// /// 是否开启TCP层KeepAlive功能 /// <returns></returns> public bool Init(bool KeepAlive) { try { if (mSocket != null) { Close(); } /...
"阿塔拉斯开放协议_appendix_for_PowerFocus_6000_Open_Protocol" 阿塔拉斯开放协议是PowerFocus 6000的一个开放接口,允许用户在远程控制或数据订阅控制器时构建应用程序。该协议独立于平台,可以在Linux、PLC、...
Protocol Buffer是一种由Google开发的数据序列化协议,它旨在简化数据的存储和通信。Protocol Buffer与平台无关,是一种高效的二进制格式,用于结构化数据的串行化(序列化)。它通常用于替代传统文本格式,如XML或...
网页通过 URL Protocol 协议调用本地程序。该程序将协议信息写到注册表中。
Protocol Buffer 技术详解(语言规范) Protocol Buffer 是一种语言中立、平台中立、可扩展的序列化数据格式,用于在通信网络和数据存储中交换结构化数据。Protocol Buffer 技术的主要优点是可以在不同的语言和平台...