Question

J'ai une application web qui a quelques processus qui peut prendre jusqu'à 10 minutes pour courir. Parfois, ces processus sont déclenchés par un utilisateur et ils ont besoin de la sortie comme elle est traitée.

  

Par exemple, l'utilisateur recherche   quelques dossiers dont ils ont besoin. le   cliquez sur le bouton pour récupérer la   dossiers (ce qui est la partie qui peut   prendre 10 minutes). Ils peuvent continuer   à travailler sur d'autres choses, mais quand ils   cliquez sur Retour pour afficher les retours, il est   mis à jour les enregistrements sont téléchargés   dans le système.

En ce moment, l'utilisateur est verrouillé alors que le processus fonctionne. Je sais pcntl_fork () à la fourche un processus enfant afin que l'utilisateur n'a pas à attendre que le finalise long processus.

Je me demandais s'il est possible de lier ce processus fourchue à l'utilisateur spécifique qui a déclenché la demande dans une variable $_SESSION afin que je puisse mettre à jour l'utilisateur lorsque le processus est terminé. Aussi, est-ce la meilleure façon de mettre à jour un utilisateur sur un processus de longue durée?

Était-ce utile?

La solution

Je pense que gearman à vos besoins. Regardez ce code échantillon prélevé dans le doc:

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

?>

Si vous stockez la $job_handle dans la session, vous pouvez adapter l'échantillon pour faire un script de contrôle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top