2010-11-30 21 views
0

我想要一个GAE应用程序,它所做的就是注册用户并将联系人与他们关联,并返回他们的在线状态。如果在线返回他们的IP。所以我有一个JPA实体与用户ID和联系人列表,以及一个瞬时IP字段。每次用户登录时,我都会将其保存在地图中。什么时候gae中的servlet静态变量?

private static final Map<String, SSUser> connectedRegisteredUsers = new HashMap<String, SSUser>(); 

现在令人惊讶的是,似乎在一段时间后地图被清空,并且会忘记用户。我不知道为什么会发生这种情况,如何验证它(除了观察行为),还有替代方法,除了将IP存储在数据存储中。

回答

2

App Engine可随时启动和关闭应用程序的实例,以响应不断变化的流量模式。这里有两个问题:首先,你的应用程序将运行多个不同的实例,在多台机器上,每台机器都有独立的状态(包括你的静态变量)。其次,实例可以随时关闭并启动,清除静态变量。

如果您需要全局一致的数据,则需要使用memcache和/或数据存储。

+0

http://code.google.com/appengine/docs/java/memcache/usingjcache.html – simpatico 2010-11-30 02:56:01

相关问题