【问题标题】:Singleton instance of controller per user for Ajax request in Grails?Grails中Ajax请求的每个用户控制器的单例实例?
【发布时间】:2015-04-01 01:27:57
【问题描述】:

我正在为少数用户(最多 10 个)编写一个小型 Grails 应用程序。它将托管在 Heroku 免费托管(1 dyno=512 MB RAM)上。

应用程序将有一个用户表单,在提交时会触发一个 Ajax 请求,该请求会在控制器中生成一个线程。(默认提交操作通过 preventDefault() 被阻止,因为该任务非常耗时并且 Heroku 的超时时间约为30 秒)。

例如,线程从外部 api/url 获取项目列表,控制器将有一个实例变量,例如 itemFetched。用户表单的网页将包含一个进度小部件,该小部件将定期显示此itemFetched 的值。

usera 启动一个线程,当它在后台运行时,用户在离开该页面并再次点击该 url 时会看到itemFetched 的状态。

如何创建一个“每个用户”控制器(只要通过 Ajax 线程产生的线程正在运行),而不是每个 HTTP 请求(即原型范围)?

【问题讨论】:

  • 您是否考虑过使用会话范围服务?这将允许每个 http 会话有一个服务实例。几乎就是你要找的东西。
  • @JoshuaMoore 我认为如果用户离开页面并再次返回,会话范围的服务将无法工作,因为它会开始一个新的“会话”。
  • 不,这正是会话的用途 - 维护请求之间的状态。
  • @BurtBeckwith 啊,是的,明白了。我这么大的白痴竟然忘记了这个简单的点!
  • @JoshuaMoore 你可以把它作为答案。我相信这会奏效。我会接受赞成票。

标签: ajax grails heroku


【解决方案1】:

在这种特殊情况下,会话范围的服务将是完美的选择。您可以在documentation 中了解更多信息。

通过使您的服务会话限定范围,每个 HTTP 会话都将拥有自己的服务实例,您可以在给定会话中维护请求之间的状态。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多