Я хочу написать PHP-скрипт, который будет действовать как мини-демон для получения данных из удаленного сокета. Удаленный сервер является сервером VoIP Asterisk, и я буду подключаться к интерфейсу управления 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-скрипте, подключенном к сокету?
Привет, Б