原文地址:Asterisk-Java 教程(中文版) -- FastAGI协议作者:天那边的米高
FastAGI协议

通过FastAGI协议能够用最简单的方法使我们的JAVA应用程序和Asterisk交互。AGI脚本能够处理任何呼入或通过Manager API发起的呼出。

AGI(Asterisk Gateway Interface)让你可以向Asterisk的拨号计划发送脚本,传统的脚本和Asterisk之间的通讯是通过标准输入和标准输出,并且脚本必需和Asterisk运行在同一服务器上。

这此缺点已经由FastAGI解决,FastAGI基于AGI通过TCP/IP Socket连接替代标准输入和标准输出做为沟通的媒介。

你可以使用FastAGI运行Java应用程序(可以在不同的机器上运行Asterisk) ,它仅启动一次AGI 脚本直到它被关闭。使用此协议结合Java的多线程支持可以构建非常快的脚本。

Asterisk-Java提供了一个容器帮助你运行你的JAVA脚本,并接收Asterisk服务器连接的,解析请求或通过URL调用你的脚本。

Hello AGI!

写AGI脚本你必需实现AgiScript的接口,你可以通过继承实现了AgiScript接口的BaseAgiScript并覆盖它的方法来进一步简化这一工作。

一个简单的AGI脚本的例子:

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();

}

}

编译:

$ javac -cp asterisk-java.jar HelloAgiScript.java

$

下一步,在Asterisk拨号规则里为你的脚本添加一个呼叫。

你可能需要在extensions.conf默认的节里添加一个分机1300:

[default]

...

exten => 1300,1,Agi(agi://localhost/hello.agi)

用运行Asterisk-Java机器的IP地址代替代码中的“localhost”。

重新加载Asterisk确保更改生效。

现在你必须映射脚本的名称hello.agi到我们刚刚创建的HelloAgiScript。默认情况下通过启动AgiServer时调用classpath 路径下的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

最后我们运行 AgiServer:

$ java -jar asterisk-java.jar

如果是 Asterisk-Java 0.3.1 或更早的版本,你需要用

$ java -cp asterisk-java.jar:. org.asteriskjava.fastagi.DefaultAgiServer

在Windows平台:

$ java -cp asterisk-java.jar;. org.asteriskjava.fastagi.DefaultAgiServer

如果你看到一些类似于如下的日志输出表示AgiServer已经成功开始运行:

Mar 11, 2005 10:20:12 PM org.asteriskjava.fastagi.DefaultAgiServer run

INFO: Thread pool started.

Mar 11, 2005 10:20:12 PM org.asteriskjava.fastagi.DefaultAgiServer run

INFO: Listening on *:4573.

When you call extension 1300 you will see the AGI script being launched:

Mar 11, 2005 10:22:47 PM org.asteriskjava.fastagi.DefaultAgiServer run

INFO: Received connection.

Mar 11, 2005 10:22:47 PM org.asteriskjava.fastagi.AgiConnectionHandler run

INFO: Begin AgiScript HelloAgiScript on AgiServer-TaskThread-0

Mar 11, 2005 10:22:48 PM org.asteriskjava.fastagi.AGIConnectionHandler run

INFO: End AgiScript HelloAgiScript on AgiServer-TaskThread-0

扩展范例

查看BaseAgiScript的文档,你将发现更多的可以用在你的脚本中的方法。如你想用的方法不在BaseAgiScript中,或你想用你的命令扩展FastAGI,你可以用channel.sendCommand(AgiCommand)方法发送任意的命令。

使用AGI命令你可以通过URL传递参数给你的脚本,在AgiRequest中你可以通过调用getParameter(String)或getParameterValues(String)读取这些参数。

如果你想传递名称为user,值为john的参数给你的脚本hello.agi,你可以这样写:

exten => 1300,1,Agi(agi://localhost/hello.agi?user=john)

你可以传递多个参数,参数中的特殊字符必需为URL编码。

如果你要写一个复杂的脚本,请注意您的AgiScript必须是线程安全的。只有一个实例被用来处理所有请求,这是一个类似于servlet容器的引擎。

配置

你可以通过设置两个属性来调整DefaultAgiServer:bindPort、poolSize;

bindPort为设置TCP端口服务器侦听端口。FastAGI默认端口为4573,如果你修改了,在extensions.conf中请使用你设置的新端口。如你将bindPort属性修改为1234,在extensions.conf中设置如下:

exten => 1300,1,Agi(agi://localhost:1234/hello.agi)

DefaultAgiServer为AgiScripts使用一个固定大小的线程池。poolSize确定有多少线程可以同时使用,因此,你应该将它设置为AgiServer能够处理的并发的数量。poolSize默认值为10。

这些属性配置可以通过classpath下的fastagi.properties的文件进行配置。

如下:

bindPort = 1234

poolSize = 20

Asterisk-Javanbsp;教程(中文版)…相关推荐

  1. 撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 什么是 PyTorch?其实 PyTorch 可以拆成两部分:Py+Torch.Py 就是 P ...

  2. 简明python教程-简明Python教程-中文版.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython 简明Python教程-中文版.pdf152页 本文 ...

  3. OpenCV官方教程中文版

    OpenCV官方教程中文版(For Python) OpenCV2-Python-Tutorials 段力辉 译 说明:搬运自linux公社pdf文件,粗略搬运,仅作个人笔记参考,有时间再美化 部分文 ...

  4. GraPhlAn教程中文版——超炫物种树进化树绘制

    文章目录 GraPhlAn教程中文版 概述Overview 介绍Introduction 安装Installation 方法1. Bioconda快速安装 方法2. Mercurial下载 方法3. ...

  5. pytorch官方教程中文版(一)PyTorch介绍

    pytorch编程环境是1.9.1+cu10.2 建议有能力的直接看官方网站英文版! 下面所示是本次教程的主要目录: pytorch官方教程中文版: PyTorch介绍 学习PyTorch 图像和视频 ...

  6. python官网 中文版-python .. 官方教程中文版.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython python .. 官方教程中文版.pdf105页 ...

  7. 面向开发人员的 ChatGPT 提示词教程中文版 - ChatGPT 版

    面向开发人员的 ChatGPT 提示词教程中文版 - ChatGPT 版 1. 指南 1-1. 提示的指南 1-2. 配置 1-3. 提示语原则 原则 1: 写出清晰而具体的指示 技巧 1: 使用分隔 ...

  8. iphone3开发基础教程中文版高清PDF全集迅雷高速下载

    转自:http://bbs.lwxshow.com/thread-127-1-1.html 资源-IOS开发:Iphone3开发基础教程中文版高清PDF迅雷高速下载 Iphone3开发基础教程PDF下 ...

  9. 风景水彩画教程中文版 跟傅兰克学画画全16集高清

    跟富兰克学画画 风景水彩画教程中文版 跟傅兰克学画画全16集高清 配音:国语 说明:高清晰画质,国语版!平均一部约1000M 作者简介 傅兰克,生于爱尔兰都柏林,是爱尔兰最受欢迎的画家之一.由BBC出 ...

  10. swift编程语言基础教程 中文版

    swift编程语言基础教程 中文版 http://download.csdn.net/detail/u014036026/7845491

最新文章

  1. App Store 申请审核加速
  2. JQuery知识点汇总
  3. 动态设置html字号,动态设置html的font-size值 (适配文字大小)
  4. Docker学习总结(53)—— Docker 十个非常实用但又容易忽视的使用技巧
  5. python selenium爬虫代码示例_python3通过selenium爬虫获取到dj商品的实例代码
  6. 骨骼动画编辑器Spine的纹理打包器(texture packer)
  7. php算数组内值的总和,怎样使用array_sum() 计算数组元素值总和
  8. Oracle实验三 基于大数据集的数据库操作
  9. MSXML的不同版本使用
  10. 网络安全专题报告:零信任安全,数字时代的主流安全架构
  11. 如何在C#中将 加载、编辑WPS表格?国产控件就能搞定
  12. 《淘宝技术这十年》 读书笔记
  13. 什么是ring0-ring3
  14. 三星新旗舰手机 GALAXY S III正式发布
  15. html css javascript七夕情人节表白网页【樱花雨3D相册】超好看
  16. 倍福mySQL通讯_C#和倍福PLC之间的通讯控制
  17. linux如何编写crontab定时脚本,linux下编写定时任务crontab
  18. element ui 表格全选与否
  19. 算法之二维数组(大炮打蚊子)
  20. 计算机的新兴技术在测绘工程领域的应用,GPS测绘技术在测绘工程中的具体应用...

热门文章

  1. 面向对象编程 — 为什么要引入抽象概念?
  2. Achain 钱包部署
  3. 微信支付获取用户真实ip
  4. 在龙芯3A3000中标麒麟7.0环境下编译golang1.14.1源码
  5. vue项目中实现多语言 vue-i18n处理动态加载后端数据语言
  6. cad相对坐标快捷键_47个快捷键+50个CAD技巧助你玩转CAD
  7. EPIC/Steam 手柄没反应问题解决办法
  8. python实现斗地主发牌洗牌
  9. excel取消合并单元格并自动填充数据
  10. 关于java Stream流将list集合分组之后与原list的集合的顺序不一致的问题