Grails 中 Ajax 请求的每个用户的控制器单例实例?

Singleton instance of controller per user for Ajax request in Grails?

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

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

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

的值

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

如何创建 "per user" 控制器(只要通过 Ajax 线程生成的线程是 运行),而不是每个 HTTP 请求(即原型范围)?

在这种特殊情况下,会话范围的服务将是一个完美的选择。您可以在 documentation.

中阅读更多相关信息

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