Как установить постоянное соединение с менеджером Asterisk с помощью PHP? - PullRequest
4 голосов
/ 15 марта 2012

Я пытаюсь подключиться к интерфейсу диспетчера 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 выходит из системы.с сервера после отправки вывода.

Другими словами, 'admin' выходит из системы, даже если я явно не вышел из системы в коде.Как я могу сделать это соединение постоянным?

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Asterisk AMI не закрывает соединение автоматически, однако это делает сетевой уровень, когда он не обнаруживает никаких действий в течение длительного времени (= тайм-аут), он разрывает соединение. Чтобы обеспечить постоянство соединения, требуется, чтобы оно было занято (= поддерживать активность), всякий раз, когда соединение не используется, ваше приложение должно отправлять пакеты поддержки активности на целевой сервер через указанный интервал (= TTL). Мы можем использовать любой тип команды в качестве пакета поддержки активности, как в звездочке, вы можете использовать «Ping».

Однако, если вы ищете какое-то существующее готовое решение, вы можете использовать для этого прокси-сервер AMI. вот некоторые известные прокси AMI

0 голосов
/ 15 марта 2012

Я думаю, вы просто используете класс php-agi.php. в нем уже есть все что нужно. Нет необходимости писать снова.

php-agi.php распространяется с любой звездочкой и находится в / var / lib / asterisk / agi-bin /

...