Frage

ich eine Web-App haben, die ein paar Prozesse hat, die bis zu 10 Minuten dauern kann, laufen. Manchmal werden diese Prozesse durch einen Benutzer ausgelöst, und sie brauchen die Ausgabe, wie es verarbeitet wird.

Zum Beispiel wird der Benutzer sucht ein paar Aufzeichnungen, die sie benötigen. Das klicken Sie auf die Schaltfläche zum Abrufen der Aufzeichnungen (das ist der Teil, dass Dose nehmen 10 Minuten). Sie können weiterhin aber auf andere Dinge zu arbeiten, wenn sie Klicken Sie wieder die Rückkehr zu sehen, es ist da die Datensätze aktualisiert werden heruntergeladen in das System.

Im Moment der Benutzer gesperrt wird, während der Prozess ausgeführt wird. Ich weiß, über pcntl_fork () einen untergeordneten Prozess gabeln, so dass der Benutzer erst in der langen Prozess abgeschlossen ist, warten hat.

Ich habe mich gefragt, ob es möglich ist, dass die gegabelten Prozess zu dem bestimmten Benutzer zu binden, der die Anforderung in einer $_SESSION Variable ausgelöst, so dass ich den Benutzer aktualisieren kann, wenn der Prozess abgeschlossen ist. Auch ist dies der beste Weg, um einen Benutzer auf einem lang laufenden Prozess zu aktualisieren?

War es hilfreich?

Lösung

ich glaube, gearman Ihren Bedürfnissen entspricht. Sehen Sie in diesem Beispielcode aus dem doc genommen:

<?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";

?>

Wenn Sie die $job_handle in der Sitzung speichern, können Sie die Probe Anpassung an ein Steuerungsskript zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top