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

Arh*_*shi 5 php asterisk amazon-ami

我正在尝试连接到 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;
 }
Run Code Online (Sandbox Code Playgroud)

就连接而言,上述代码有效。我能够通过它获取数据。

问题是发送查询需要很长时间,当我以实时模式(控制台)观察服务器时,我看到用户管理员在发送输出后从服务器注销。

换句话说,即使我没有在代码中明确注销,“admin”也会被注销。我怎样才能使这个连接持久?

Nas*_*bal 4

Asterisk AMI 不会自动关闭连接,但它是由网络层执行的,当它检测到长时间(=超时)没有活动时,它会断开连接。为了使连接持久化,需要保持连接繁忙(=保持活动),每当连接空闲时,您的应用程序应该以指定的时间间隔(=TTL)向目标服务器发送保持活动数据包。我们可以使用任何类型的命令作为保持活动数据包,例如星号中您可以使用“Ping”。

但是,如果您正在寻找一些现有的即用型解决方案,那么您可以使用一些 AMI 代理。以下是一些已知的 AMI 代理