извлечение непрерывного потока XML-данных, их декодирование и помещение в базу данных

#php #javascript #ajax #client

#php #javascript #ajax #клиент

Вопрос:

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

То есть скрипт должен в основном выполнять это.

  while($dump == true)
    {
    $fetchxml = "http://agent.getstream.org/sample?from=$seq";
    $seq = $fetchxml["nextsequence"];
    $somedata = $fetchxml["sumdata"];
    mysqlinsert_db;
    }
  

так что из браузера, если я нажму кнопку на стороне сервера, я смогу получить ее и изменить $ dump на true или false в зависимости от того, нажат ли start или stop.

Возможно ли это? технология без ограничений. фактически, я был бы рад, если бы кто-нибудь мог сообщить мне, какую технологию я должен использовать в серверной части для выполнения подобных требований, поскольку интерфейс, очевидно, будет на javascript.

Ответ №1:

Вы хотите, чтобы процесс на сервере был остановлен и перезапущен из другого процесса.

Один из способов сообщить об остановке непрерывного процесса — использовать файл блокировки.

 while (true) {
   if (file_exists('continue.tmp')) {
      // Do whatever is done
   } else {
     // do nothing for a minute
     sleep(60);
   }
}
  

Другой процесс просто выбрасывает continue.tmp , чтобы остановить обработку, и создает ее для возобновления.

Лучшей альтернативой было бы выйти из цикла, когда файл будет удален, и перезапустить процесс, используя любой метод, который есть для этого на вашем сервере — но как это сделать, действительно зависит от используемого сервера. Но затем, воссоздав файл блокировки при перезапуске, вы сразу узнаете, запустился он или нет.

Ответ №2:

Учитывая, что этот скрипт будет запускаться в CLI, у вас есть 2 способа управлять им. Я расскажу вам, что бы я использовал.

 while(true) {
  //> do your operations
  include('control.php');
}
  

Когда вы хотите остановить это, вам просто нужно поставить exit; в control.php .
Конечно, вы можете вводить любые переменные / объекты, если вам нужны дополнительные элементы управления.

Что касается части retrive, вы можете просто использовать file_get_contents и simpleXML class для обработки данных

Комментарии:

1. как бы я ввел exit; в control.php динамически во время выполнения??? скажем, я нажимаю кнопку в браузере?

2. вы можете просто отредактировать файл control.php вручную. Или, если вы хотите сделать это с помощью кнопки, вам нужно всего лишь выполнить file_put_contents('control.php','<?php exit; ?>'); Но здесь мы находимся на действительно базовом уровне