【问题标题】:How can I execute code after rendering a response to the client in Grails?在 Grails 中向客户端呈现响应后如何执行代码?
【发布时间】:2013-11-07 18:50:33
【问题描述】:

我正在用 Grails 2.X 编写一个控制器,它开始了一项漫长的工作。我希望能够向网页呈现一些内容,表明进程已开始,并带有正在进行的作业的 id,并让该响应实际显示在用户的网络浏览器中,然后继续处理工作。

我试过只使用渲染而不返回,用户的浏览器只是挂起,直到整个作业完成,然后渲染作业开始。

我尝试重定向到呈现我的消息的不同操作,但这也会挂起浏览器,直到作业完成。

我已经研究过使用过滤器和 afterInterceptor,但尽我所能告诉它们在最终页面发送回客户端之前生效并进行处理。我需要将最后一页发回给我的客户,然后继续处理。

【问题讨论】:

  • 因此您需要创建一个新线程,但是为了将数据发送给用户,您必须实现某种形式的长轮询、comet、websockets 等。
  • 我可以,但我不打算在完成之前进行持续更新。它更像是“设置它并忘记它”类型的任务。我想我只会将作业的状态保存到数据库中,并在需要时提供一个控制器来检查它。

标签: grails


【解决方案1】:

您将要启动后台作业。您可以使用石英或查看 grails 2.3 异步项。如果时间很长,使用 Quartz 可能是您的最佳选择。

您将希望返回客户端可用于查询作业状态的内容,例如作业 ID 或处理完成后更新的某些记录。

【讨论】:

  • 我认为 grails 2.3 asynch 可能只是我所有问题的答案!由于需求不断变化,我今天已经完成了这项任务,但是一旦我证明了这个概念,我会将其标记为已接受的答案。
猜你喜欢
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多