#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; ?>');
Но здесь мы находимся на действительно базовом уровне