2017-04-05 41 views
0

当用户点击一个按钮时,我需要执行一个耗时的任务。基本上,我会在每个帖子上做一些处理,向很多人发送请求到远程服务器。如何在后台处理请求并稍后报告结果?

用户不会立即需要结果,所以我可以在后台运行它。但是我需要能够告诉用户当他们再次访问该页面时,任务是否完成(以及结果如果完成)。另外,我不希望他们能够在第一个仍在运行时启动另一个相同任务的实例(通过单击按钮)。

任何方式我可以做到以上所有?

编辑:我正在开发的WordPress。它被贴上标签,但我想我应该在问题中提到它。

+0

你可以每5秒使用javascript轮询您的网站,并检查该作业是否完成。 – bumperbox

+0

你将需要实现某种类型的队列系统 – Trent

+0

@bumperbox这不是问题。我希望他们能够离开该页面。当他们回到那个页面时,它说任务还没有完成,完成等等。代码的服务器端是我的问题。 – lfk

回答

0

您需要JavaScript才能创建Ajax请求。你需要学习至少JavaScript的基础知识,然后你可以尝试一个库(例如jQuery),或者你可以创建一个库(如果可以的话)。

+0

这就是我现在正在做的(jQuery)。任务耗时过长,请求超时。我知道我可以增加超时时间,但是我没有必要让用户留在同一页面上。 – lfk

0

这是基本的过程中,我会去通过

  1. 创建一个会话(存储在cookie中,长效)
  2. 将请求发送到服务器(通过AJAX或表单提交)
  3. 服务器在数据库中创建工作记录,例如 jobs table = session_id | job_id |状态
  4. 页面将重新加载并检查属于session_id的所有作业的数据库并显示它们。
  5. 用户离开并稍后回来
  6. 页面加载并检查属于session_id的所有作业的数据库并显示它们。

其他想法

  • 作业完成时,你可以向用户发送电子邮件。
  • 长时间运行的作业可以通过守护进程或cron作业启动。
  • 从命令行运行PHP脚本,没有超时问题,如Web服务器请求
  • 你可以存储在数据库表作业进度,如果你想进入详细程度