Google App Engine:保持HTTP请求之间的对象状态(Java)

时间:2012-06-08 09:54:25

标签: google-app-engine

用户向服务器发出HTTP请求。这个请求是用某个类的对象处理的,我们称之为“处理器”。然后两分钟内的同一用户发出另一个HTTP请求。我希望它与第一个处理器的处理器处理相同。所以基本上我想在几个请求中保持某个对象的状态。

我知道我每次都可以将它保存到数据存储区然后加载回来,但这种方法似乎很慢。有没有办法将对象存储在某个RAM位置?

3 个答案:

答案 0 :(得分:1)

如何使用memcache

您无法确保对您的应用的连续请求将转到同一个实例,但是memcache可以帮助减少或消除为每个请求访问数据存储区的开销。

答案 1 :(得分:1)

听起来你正在描述会话

我不确定您使用的是哪种语言运行时和Web框架,但它肯定包含对会话的支持。 (如果您使用的是Java,则需要enable it。)

标准会话机制将小ID放在存储在用户浏览器中的cookie中。在每个请求中,每个请求都可以转到不同的应用程序服务器,此ID用作从数据存储读取和写入持久性信息的密钥。

如果数据存储访问速度太慢,我建议不要将memcache用于此会话存储,因为memcache设计不可靠,因此用户的会话信息可能随时消失,对他们来说是一次糟糕的经历。

如果您要存储的数据量少于几千字节,那么我建议您执行Play Framework所做的工作,即加密会话数据并将其直接存储在用户浏览器中存储的cookie中。这是快速而真正无国籍的。

如果您有更多的数据存储在cookie中,并且您不想使用数据存储,则可以在浏览器上使用JavaScript本地存储,并使用AJAX调用与服务器通信。 (如果要支持旧版浏览器,可能需要使用jStorage包装器库。)

答案 2 :(得分:0)

如果memcache不够,您可以使用后端来维护状态。使用驻留后端(或其中一组)并将来自前端的传入请求路由到具有该状态的后端计算机。

文档:Python Java