Я ищу сценарий PHP, который будет действовать как мини-демон для получения данных из удаленного сокета. Удаленный сервер - это сервер Asterisk VoIP, и я буду подключаться к интерфейсу управления Asterisk (AMI) в попытке получать уведомления о событиях AMI. Соединение будет осуществляться через постоянно включенный SSH-туннель (с использованием autossh), который до сих пор был достаточно стабильным для нашего использования.
Вот план ...
- PHP-скрипт для подключения к локальному порту туннеля SSH, который перенаправляет на удаленный порт на другом конце, используя
fsockopen()
или, скорее всего, pfsockopen()
- PHP-скрипт будет запускаться из CLI, и я полагаю, что у меня должен быть какой-то сценарий оболочки для задания cron, чтобы проверить, что PHP-скрипт не остановился по какой-либо причине
- Мне понадобится, чтобы этот PHP-скрипт работал постоянно и постоянно подключался к сокету для получения данных, когда они публикуются другим концом
- Память и ЦП не являются проблемой, поскольку у нас достаточно ресурсов на нашем сервере внутренней сети (преступно используется недостаточно), но в равной степени я не хочу, чтобы этот скрипт вышел из-под контроля
- PHP-скрипт, как мы надеемся, будет реагировать на случайные данные, появляющиеся на другом конце сокета, и иногда вставлять или обновлять данные в базе данных MySQL. Очевидно, я буду открывать / закрывать соединение MySQL при необходимости, а не просто оставлять его зависшим.
Прежде всего, это ужасная идея, которая никогда не сработает?
Я понимаю, что PHP, вероятно, не самый лучший язык для такого маленького демона, как этот, но я уже имел успех с PHP на CLI, и этот язык мне наиболее удобен в наши дни.
Существуют ли какие-либо функции PHP, которые могут вступить в действие при публикации данных на другом конце сокета?
Или я бы просто зациклился, используя fread()
вот так ...
while (!feof($socket)) {
$output .= fread($socket, 8192);
}
Параметр цикла кажется немного беспорядочным, поэтому мне просто интересно, есть ли другой способ, который будет означать, что скрипт остается подключенным к сокету, но в основном простаивает, пока не появятся некоторые данные.
Какие минусы / подводные камни я должен знать, думая о подключении постоянно работающего PHP-скрипта к сокету?
Приветствия, B