Выполнение процесса PHP и связывание к конкретным веб-пользователю

StackOverflow https://stackoverflow.com/questions/4632883

  •  08-10-2019
  •  | 
  •  

Вопрос

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

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

Прямо сейчас пользователь заблокирован во время процесса. Я знаю о PCNTL_FORK () для вилки ребенка, так что пользователю не нужно ждать, пока длительный процесс не завершится.

Мне было интересно, можно ли привязать этот разветвленный процесс для конкретного пользователя, который вызвал запрос в $_SESSION Переменная, чтобы я мог обновить пользователя, когда процесс завершен. Кроме того, это лучший способ обновить пользователя в длительном процессе?

Это было полезно?

Решение

я думаю шестерня соответствует вашим потребностям. Посмотрите на этот образец код, взятый из док:

<?php

/* create our object */
$gmclient= new GearmanClient();

/* add the default server */
$gmclient->addServer();

/* run reverse client */
$job_handle = $gmclient->doBackground("reverse", "this is a test");

if ($gmclient->returnCode() != GEARMAN_SUCCESS)
{
  echo "bad return code\n";
  exit;
}

$done = false;
do
{
   sleep(3);
   $stat = $gmclient->jobStatus($job_handle);
   if (!$stat[0]) // the job is known so it is not done
      $done = true;
   echo "Running: " . ($stat[1] ? "true" : "false") . ", numerator: " . $stat[2] . ", denomintor: " . $stat[3] . "\n";
}
while(!$done);

echo "done!\n";

?>

Если вы храните $job_handle На сеансе вы можете адаптировать образец, чтобы сделать скрипт управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top