什么时候servlet静态变量是gae?

时间:2010-11-30 01:41:35

标签: google-app-engine servlets static-members

我正在尝试拥有一个GAE应用程序,它只需注册用户并将联系人与他们关联,并返回其在线状态。如果在线返回他们的IP。所以我有一个带有用户ID和联系人列表的JPA实体,以及一个瞬态ip字段。每次用户登录时,我都会将其保存在地图中。

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

现在令人惊讶的是,似乎一段时间后地图被清空,并且会忘记用户。我不知道为什么会这样,除了在数据存储区中存储IP之外,如何验证它(除了观察行为之外)和替代方案。

1 个答案:

答案 0 :(得分:2)

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

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