1

我知道默认情况下,Grails 中的服务范围是单例的。这意味着一个实例被创建并传递。在与许多用户打交道时,例如 Facebook 或 Twitter,范围应该是会话还是其他?我很欣赏一些解释。我正在使用 Grails 设计一个社交网络类型的网站,我想知道将范围设置为什么。我知道一种解决方法是评估使用单个实例是否会引起问题,但我对此知之甚少。

4

2 回答 2

2

在 Grails 中拥有单例服务范围只有在您使服务有状态时才会出现问题,这意味着您声明实例变量并在其中存储与特定请求相关的内容,在这种情况下,这些实例变量可用于使用该服务的所有请求. 在服务器上存储用户特定数据的适当位置是在 HTTP 会话中,而不是在控制器或服务中的实例变量中。

于 2013-09-16T20:36:05.390 回答
1

在会话范围的服务中存储用户特定的每个会话数据将起作用,并且在小型 Web 应用程序中很常见。它或多或少等同于将数据直接存储在 HTTP 会话中,但使您不必直接处理会话对象。

但是,有状态服务通常不适合大型应用程序。您可能需要在没有会话的情况下重用您的服务,例如作为 API。此外,根据数据类型,会话可能不是最佳选择;客户端的 cookie、持久化的域对象或像 memcached 这样的名称/值存储可能更有意义。这取决于应用程序的规模和您存储的数据类型,并且可能会在您的应用程序的生命周期内发生变化。将状态构建到您的服务中使您很难改变策略。

于 2013-09-16T21:29:15.273 回答