如何使用PHP建立与Asterisk管理器的持久连接



我正试图连接到Asterisk manager接口,但我遇到了代码阻塞和连接持久性问题。以下是我所掌握的,然后是对问题的描述:

/**
 * 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代理。以下是一些已知的AMI代理

我认为您只需要使用php-agi.php类。它已经具备了你所需要的一切。没必要再写一遍。

php-agi.php以任何星号分布,可以在/var/lib/agister/agi-bin/中找到

相关内容

  • 没有找到相关文章

最新更新