分叉PHP流程并与特定的Web用户联系
-
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
在会话中,您可以调整样本以制作控制脚本。
不隶属于 StackOverflow