cronjob help - необходимо обновлять веб-сайт клиентов в режиме реального времени

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

1. http://abc123.com/using-cron-job-update-this-folder.txt <-- I'm working on this
2. http://bw.aaaaaa.com/blah.txt                           <-- Client's 2nd site where some txt gets updated almost twice a day, on this folder blah.txt

Мне нужен фрагмент php для выполнения cronjob, т.е. захвата текста из site2 - http://bw.aaaaaa.com/blah.txt в режиме реального времени и обновления site1 - http://abc123.com/using-cron-job-update-this-folder.txt, как только какой-либо текст будет обновлен на сайте 1.


person Freddy Hoods    schedule 26.09.2012    source источник
comment
это не быстрое решение. определить максимальную задержку между изменением и обновлением. на сайте есть 2 http-заголовка, в которых указана точная дата последнего изменения?   -  person Jan Prieser    schedule 26.09.2012


Ответы (1)


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

  1. Сервер, который будет брать файл с другого сервера, назовем его КЛИЕНТ.
  2. Сервер, который будет содержать новую информацию для копирования КЛИЕНТОМ, назовем его СЕРВЕР.

На КЛИЕНТЕ создайте PHP-скрипт, который использует CURL для загрузки только заголовков удаленного файла и, в частности, даты изменения.

В следующем ответе содержится полезный фрагмент.

Сохраните эту дату, и при следующем запуске сценария проверьте, обновлен ли он, затем загрузите полный исходный код, включая тело, и сохраните его, как вам нравится (например, в локальный текстовый файл на КЛИЕНТЕ).

Снова на КЛИЕНТЕ создайте cronjob, который будет запускаться каждую секунду или каждые 5 секунд или так часто, как вы хотите, чтобы содержимое обновлялось. Это может пригодиться для настройки cronjob.

В качестве альтернативы вы можете создать один PHP-скрипт, который зациклится и что-то сделает (загрузит удаленный файл) и заснет на 1 секунду, делая это в общей сложности 60 секунд, а затем останавливаясь. Объедините это с cronjob, который запускается каждую минуту, и вы получите тот же эффект, без вызова cron на сервер CLIENT каждую секунду. Чтобы увидеть реализацию этого подхода, см. этот вопрос и его принятый ответ.

Лучшей и рекомендуемой альтернативой является использование AJAX, который запускается на стороне клиента. Заставьте его запускаться, как только мышь пользователя перемещается, и извлекайте дату с СЕРВЕРА через API, который вы можете выставить на стороне СЕРВЕРА (например, тот, который будет возвращать данные в формате JSON для анализа библиотекой JavaScript, такой как jQuery, внутри браузера пользователя ). Стена Facebook закодирована таким образом. Если вы просто оставите стену открытой на фоновой вкладке, она не загрузит никакого нового контента. Как только вы вернетесь к нему и наведете курсор мыши, отобразятся новые сообщения.

person Dzhuneyt    schedule 26.09.2012
comment
Опять же, не забывайте о потере производительности, связанной с выполнением ресурсоемких задач в течение короткого периода времени. Вы уверены, что это нельзя сделать с помощью демона, работающего в фоновом режиме? - person Dzhuneyt; 27.09.2012