我正在尝试连接到Asterisk管理器界面,我遇到了代码阻塞问题,以及连接持久性问题.以下是我的内容,然后描述出现了什么问题:
/**
* The parameters for connecting to the server
*/
$params = array('server' => '192.168.1.100', 'port' => '5038');
/**
* Instantiate Asterisk object and connect to server
*/
$ast = new Net_AsteriskManager($params);
/**
* Connect to server
*/
try {
$ast->connect();
} catch (PEAR_Exception $e) {
echo $e;
}
/**
* Login to manager API
*/
try {
$ast->login('admin', 'abcdefghi');
} catch(PEAR_Exception $e) {
echo $e;
}
就连接而言,上面的代码是有效的.我可以通过它获取数据.
问题是发送查询需要很长时间,当我以实时模式(控制台)观察服务器时,我看到用户管理员在发送输出后正从服务器注销.
换句话说,即使我没有在代码中明确注销,’admin’也会被注销.如何使此连接持久化?
解决方法:
Asterisk AMI不会自动关闭连接,但它是网络层的人,当它长时间检测到没有活动时(=超时)它会断开连接.要建立连接持久性,需要保持连接忙(=保持活动状态),每当连接空闲时,应用程序应以指定的时间间隔(= TTL)将保持活动数据包发送到目标服务器.我们可以使用任何类型的命令作为保持活动包,如星号,您可以使用“Ping”.
但是,如果您正在寻找一些现有的即用型解决方案,那么您可以使用一些AMI代理. here are some known AMI proxies