1

当用户请求被重定向到新实例时,我的谷歌引擎 java 应用程序丢失了所有用户数据:

"此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次加载。因此,此请求可能比您的应用程序的典型请求花费更长的时间并使用更多的 CPU。 "

因为这是非常不方便的行为,我尝试设置一个常驻实例,所以我将“空闲实例”设置为 1-1,但这并不能解决我的问题我得到一个常驻实例并且总是创建新的(动态)实例它服务于一些请求......(这个人有同样的问题:为什么 GAE 启动了第二个实例,Max Idle Instances 设置为 1

我根本不想使用动态实例(我的应用程序总是负载低,用户不多)。我只需要为用户提供一个常驻实例。可以在 GAE 中设置吗?如果没有,是否有任何方便和可靠的方式来保存页面之间的数据(例如将它们存储在数据存储中?)。我在页面之间传递了很多 POST 参数。

4

1 回答 1

1

Google App Engine 是一个云平台。如果没有动态实例,您的应用程序设计将无法获得云平台的所有优势。

要解决您的数据传输问题,您可以使用以下方法之一:

  1. 使用标准 Java EE 会话对象。会话存储在数据存储中,因此您不会丢失它。但是您不应该忘记,由于 DataStore 实体大小限制,您的会话对象应该是 SERIALIZABLE 且小于 1MB。

  2. 手动将数据存储在 DataStore 中,并在页面之间传输实体 ID。相同的 1MB 实体大小限制适用。

  3. 使用 BlobStore 或 Cloud Storage 将数据存储为文件并在页面之间传输文件标识符。这将有助于消除 1Mb 的限制。

这些方法中的任何一种都允许在请求之间保留数据,但有其自身的局限性。您需要提供您的要求的详细信息以获得明确的答案。

于 2013-01-29T02:34:46.397 回答