Grails的作用域为单例,许多用户登录并执行操作

Grails的作用域为单例,许多用户登录并执行操作,grails,scope,singleton,grails-services,Grails,Scope,Singleton,Grails Services,我知道默认情况下,Grails中的服务范围是singleton。这意味着创建并传递一个实例。当与许多用户打交道时,比如Facebook或Twitter,范围应该是会话还是其他?我感谢你的解释。我正在用Grails设计一个类似于社交网络的网站,我想知道如何设置范围。我知道一种解决方法是评估使用单个实例是否会导致问题,但我也不太清楚。在Grails中使用singleton服务范围只是一个问题,如果您使服务有状态,这意味着您声明实例变量并在其中存储与特定请求相关的内容,在这种情况下,所有使用该服务的请

我知道默认情况下,Grails中的服务范围是singleton。这意味着创建并传递一个实例。当与许多用户打交道时,比如Facebook或Twitter,范围应该是会话还是其他?我感谢你的解释。我正在用Grails设计一个类似于社交网络的网站,我想知道如何设置范围。我知道一种解决方法是评估使用单个实例是否会导致问题,但我也不太清楚。

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

在会话范围的服务中存储特定于用户的每会话数据将起作用,这在小型web应用中很常见。这或多或少相当于将数据直接存储在HTTP会话中,但不必直接处理会话对象


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

文件上传服务如何?当许多用户同时访问它来上传图像时,这会是一个单例吗?它有方法,但没有变量。我想知道是否有一个用户从他的控制器调用了fileUpload服务的upload方法,而另外三个用户同时调用了同样的方法,这会导致文件上传的混乱,因为该方法是同时调用的。你能解释一下这是否正确吗?@AlexCon:仅仅并发调用某个东西不足以导致问题,唯一可能导致问题的方法是如果方法调用共享实例变量来保存上传的文件。谢谢Nate,我几分钟前发布了一个问题,你能看一下吗?谢谢。