Создание прослушивателя событий в PHP в ожидании содержимого XML - PullRequest
1 голос
/ 22 декабря 2011

Мне нужно создать прослушиватель событий. Я новичок, так что будьте добры :)

В основном я на странице 1.php (файл php); Я хочу внутри цикла проверить page2.xml (файл xml) на некоторую информацию, которая должна быть получена в какой-то момент. Либо проверяйте это все время, либо ждите и каждые 5 минут или около того, чтобы увидеть, была ли там получена некоторая информация. Любой из них работает на меня.

Если через несколько минут информация не была получена, то я хочу снова запустить цикл (пока он не будет получен), в противном случае, двигаться вперед и что-то делать с моей вновь полученной информацией. С этой частью у меня нет проблем, только сам слушатель событий. Я не мог найти функцию, которую я должен использовать где-нибудь. :( Мне нужно только проверять и получать содержимое XML-файла так часто.

Я не совсем уверен, как мне поступить, если нет только функции, которая делает это, но я не смог найти много, когда искал "php слушателя событий".

Буду признателен за любую помощь: ссылка на учебные пособия / пример кода / даже просто сказать мне, какие ключевые слова я должен искать или что мне нужно сначала изучить, чтобы сделать это.

Спасибо!

Ответы [ 3 ]

1 голос
/ 04 января 2012

Я сделал следующее:

Автоматически сохранял в базу данных каждый раз, когда появлялось что-то новое.

Затем запускал цикл php, который каждые несколько минут проверял, есть ли что-то новое вбаза данных, которая соответствует параметрам этого нового события (в том числе того, что оно произошло в течение последних нескольких минут).Я использовал flush();, а затем sleep(120); в цикле, чтобы цикл продолжал работать каждые несколько минут, пока не появится новая информация, в этом случае она будет break(); или die();.

1 голос
/ 22 декабря 2011

Ну, во-первых, вы должны понять терминологию, которую вы используете. PHP - это не язык событий, это язык запросов. Запрос поступает на веб-сервер, PHP анализирует его и ответ отправляется обратно запрашивающей стороне. Ни в коем случае не запускаются события, которые вы можете обработать или обработать Вы можете реализовать свою собственную «систему событий», но в конечном итоге это гораздо больше работы, чем влечет за собой ваш сценарий использования.

Ваша лучшая ставка, вероятно, использует AJAX и постоянно делает запросы к вашему PHP-скрипту, пока вы не вернете данные, которые ищете. В конечном итоге вам нужно будет узнать об объекте JavaScript XMLHttpRequest. После того, как вы поймете, как делать асинхронные запросы с использованием JavaScript, вы можете посмотреть на метод setInterval() для повторного выполнения запроса.

После того, как вы сможете многократно делать асинхронные запросы, это будет относительно простой процесс создания веб-страницы, на котором вы можете инициировать отправку AJAX-запросов.


Нет необходимости в цикле в вашем PHP-коде. Цикл эффективно сделан на другом конце. Вот текстовый рабочий процесс, которому вы можете следовать:

  1. Перейдите на сайт, предназначенный для запуска ваших вызовов AJAX и запуска их.
  2. Сделайте асинхронный запрос к вашему PHP-скрипту.
  3. Внутри вашего PHP-скрипта откройте файл XML и проверьте необходимый контент.
  4. Возвращать ответ в форме объекта JSON. Один ответ может означать, что данные не были обновлены, другой ответ означает, что данные были обновлены.
  5. Разобрать ответ, если данные не были обновлены, повторить с шага (2). Если данные были обновлены, перейдите к шагу (6).
  6. Покажите праздничное приветствие об обновлении ваших данных или уведомление о том, что мы все еще ожидаем обновления данных. Возможно, у вас также может быть количество попыток в стороне.
0 голосов
/ 22 декабря 2011

Я сделал что-то вроде этого, написав синтаксический анализатор входящих сообщений на PHP. Ваш лучший вариант:

Код page1.php, в котором вам просто нужно сделать 2 вещи: прочитать XML из page2.xml и если есть что-то "новое", просто выполните анализ данных Код.

Настройка задания Cron (если вы работаете в Linux) для выполнения каждые 5 минут или около того (команда Cron выглядит примерно так: php /path/to/page1.php). Таким же образом, если вы работаете в Windows, вы можете настроить запланированное задание и выполнить ту же команду. Помните, что полный путь к вашей установке PHP должен быть в переменной среды PATH.

...