5

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」がログアウトされています。この接続を永続的にするにはどうすればよいですか?

4

2 に答える 2

4

Asterisk AMI は自動的に接続を閉じることはありませんが、それを行うのはネットワーク層であり、長時間 (=タイムアウト) アクティビティがないことを検出すると、接続をドロップします。接続を持続させるには、ビジー状態を維持する (= キープアライブ) 必要があります。接続がアイドル状態のときはいつでも、アプリケーションは指定された間隔 (= TTL) で宛先サーバーにキープアライブ パケットを送信する必要があります。「Ping」を使用できるアスタリスクのように、キープアライブ パケットとして任意のタイプのコマンドを使用できます。

ただし、既存のすぐに使用できるソリューションを探している場合は、そのために AMI プロキシを使用できます。ここにいくつかの既知の AMI プロキシがあります

于 2012-03-17T11:46:24.213 に答える
0

php-agi.php クラスを使用しただけだと思います。必要なものはすべて揃っています。もう一度書く必要はありません。

php-agi.php はアスタリスク付きで配布され、/var/lib/asterisk/agi-bin/ にあります。

于 2012-03-15T07:48:28.123 に答える