【发布时间】: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 你可以把它作为答案。我相信这会奏效。我会接受赞成票。