2012-03-14 31 views
3

私はAsteriskマネージャインターフェイスに接続しようとしていますが、コードのブロックや接続の永続性に問題があります。以下は間違って何が起こっているのかの説明に続いて、私が持っているものです:限りの接続など、PHPで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; 
} 

上記のコードで動作します。私はそれを通してデータをフェッチすることができます。

質問が送信されるのはかなり時間がかかり、リアルタイムモード(コンソール)でサーバーを観察すると、出力が送信された後にユーザーの管理者がサーバーからログアウトしていることがわかります。

つまり、コードに明示的にログアウトしていなくても、「管理者」はログアウトしています。この接続を永続化するにはどうすればよいですか?

+0

私はかなりアスタリスクに精通しています。私は可読性と明快さを改善するためにあなたの質問にいくつかの編集を加えました。編集内容が正しいことを確認してください。私が間違いを犯した場合は、何か変更を加えても構いません。 –

+0

@TimPostありがとう! ここでは、ここでコーディングするHTMLを書くのが難しいと感じています。私は投稿するたびにヘルプを読もうとしましたが。
そして、ティムは私にあなたのSkypeやEメールアドレスを教えてくれますか? –

答えて

2

アスタリスクAMIは、自動的に接続を閉じていませんが、それは、それをしないネットワーク層で見つけることができます長い時間(=タイムアウト)アクティビティが検出されない場合、接続は切断されます。接続の永続化を行うには、接続をアイドル状態にする(= keep alive)必要があります。接続がアイドル状態になると、アプリケーションは指定された間隔(= TTL)で宛先サーバーにkeep aliveパケットを送信する必要があります。アスタリスクのように「Ping」を使用することができます。

しかし、既存の使用可能なソリューションを探している場合は、そのためにいくつかのAMIプロキシを使用できます。 here are some known AMI proxies

0

あなたはphp-agi.phpクラスを使用していると思います。それはすでにあなたが必要とするすべてを持っています。それをもう一度書く必要はありません。

のphp-agi.phpは、任意のアスタリスクと一緒に配布し、中には/ var/libに/アスタリスク/ AGI-binに/

+0

実際には、あなたが言及したクラスを見ただけで(ここであなたのための例を編集するつもりでした)、クラスのバージョンは '@version 2.0'です。永続的な接続のオプションは表示されませんそれはソケットを再使用します)。私は何か見落としてますか? –

+0

私はAGIを使用していません。私はAMIを使用していますが、AGIがAMIより優れている方法を知っていれば教えてください。簡単に言えば、私はgoogleで多くを検索しましたが、その違いを理解することはできませんでした。 –

+1

AGIは制御接続(プログラムへのダイヤルプラン接続)であり、AMIはマネージャ接続(外部プログラムはアスタリスクへの接続/リスンイベント)です。申し訳ありませんが、私は逃しています。一般的な答えは同じです。 PHPにAMIクラスの実装がいくつかありますが、独自のものを作成する必要はありません。 voip-info.orgをAMI wordで検索してください。 – arheops

関連する問題