我的 Grails 应用程序中有一个长时间运行的操作。我的第一个解决方案是简单地在控制器中执行操作,让用户等待操作完成。这不是一个可接受的解决方案,我想向用户展示操作的进度。进度只是文字。该操作可能需要 10 秒到大约 30 分钟。
如何向用户显示我的长期操作的进度?
我的 Grails 应用程序中有一个长时间运行的操作。我的第一个解决方案是简单地在控制器中执行操作,让用户等待操作完成。这不是一个可接受的解决方案,我想向用户展示操作的进度。进度只是文字。该操作可能需要 10 秒到大约 30 分钟。
如何向用户显示我的长期操作的进度?
首先,您可能想尝试Executor 插件,以便可以在后台运行作业。这工作得很好。
那我猜你有2个选择。让浏览器通过 Ajax 轮询服务器以获取更新(正如 Tim 指出的那样,JProgress 插件会为您做类似的事情)或者获得更多优势并考虑使用 HTML5 WebWorkers作为一种服务器推送方法。WebWorkers 在
您将需要具有字段百分比完成的任务或作业域类之类的东西。控制器将创建并保存任务或作业,然后生成一个新线程来执行它。也许将执行代码放在服务中。
在任务或作业完成任务时更新任务或作业的百分比完成字段将取决于您的执行代码。然后您可以轮询作业(通过 ajax)以查看作业的进展情况。
注意:确定完整的百分比很大程度上取决于您的特定代码。您可能只需要根据您所拥有的知识提出一个最佳猜测。即使对于如何确定完成百分比很明显的操作(如文件下载),也不确定(网络问题等)
JProgress 插件可能会有所帮助,但我从未尝试过...
你能确定你的进步状态吗?比方说百分比?我会将长时间操作创建为 quarz 作业(背景),并通过 ajax 查询作业/长时间运行进度的状态。