GAE 端点 class 中私有变量的生命周期是多少?
What is the lifespan of a private variable in an GAE Endpoint class?
我有以下即时通讯风格应用程序的代码。
public class MyEndpoint {
private Integer numberOfConvos=0;
...}
然后我这样更新它:
@ApiMethod (name="createGroup")
public myModel createGroup(@Named("profile") String profile){
numberOfConvos=numberOfConvos+1;
}
所以每次我进行新的聊天时,我都可以创建一个唯一且不断增加的ID。
如果我重新部署后端(例如错误修复),变量会被重置吗?我不想将这个令牌存储在数据存储中,因为它似乎不需要并且数据存储收费为 reads/writes.
如果每次部署时都会重置它,那么跟踪此变量的正确方法是什么?
如果我重新部署时没有重置,我该如何强制重置?
为每个线程初始化一个非static
变量。可以在同一 App Engine 实例上 运行 多个线程,并且您的 Cloud Endpoint 服务可以在多个实例上并行 运行。
假设给定当前负载,您的 Cloud Endpoint 服务通过 3 个实例 I1、I2、I3 提供服务。我们还假设每个实例 运行 5 个线程。在这种情况下,您将拥有 15 个不同版本的 numberOfConvos
,具有 15 个不同的值。
另请注意,Google 可以随时打开或关闭实例,在这种情况下,您的服务将转移到其他实例。 这将重置 numberOfConvos
变量。
更笼统地说:你的 java 代码应该是无状态的,你不应该在变量中存储请求之间的状态,即使是 static
一个。
这里有两个选择:
如果您不want/need跟踪服务器上的会议数量,而只是想要一种唯一标识每个会议的方法,则使用UUID
class 为每个 convo 生成一个唯一的 id,碰撞风险非常低。 The documentation is here 但典型的代码是:
UUID.randomUUID().toString()
如果您想跟踪会议的数量,或将会议 ID 保存在服务器上,您唯一的选择是使用 App Engine 的数据存储等数据库来跟踪变量.如果你是这个主题的新手,我建议你read a bit about transactions,否则你将无法正确管理状态。请注意,App Engine 可以自动为您生成 ID。
我有以下即时通讯风格应用程序的代码。
public class MyEndpoint {
private Integer numberOfConvos=0;
...}
然后我这样更新它:
@ApiMethod (name="createGroup")
public myModel createGroup(@Named("profile") String profile){
numberOfConvos=numberOfConvos+1;
}
所以每次我进行新的聊天时,我都可以创建一个唯一且不断增加的ID。
如果我重新部署后端(例如错误修复),变量会被重置吗?我不想将这个令牌存储在数据存储中,因为它似乎不需要并且数据存储收费为 reads/writes.
如果每次部署时都会重置它,那么跟踪此变量的正确方法是什么?
如果我重新部署时没有重置,我该如何强制重置?
为每个线程初始化一个非static
变量。可以在同一 App Engine 实例上 运行 多个线程,并且您的 Cloud Endpoint 服务可以在多个实例上并行 运行。
假设给定当前负载,您的 Cloud Endpoint 服务通过 3 个实例 I1、I2、I3 提供服务。我们还假设每个实例 运行 5 个线程。在这种情况下,您将拥有 15 个不同版本的 numberOfConvos
,具有 15 个不同的值。
另请注意,Google 可以随时打开或关闭实例,在这种情况下,您的服务将转移到其他实例。 这将重置 numberOfConvos
变量。
更笼统地说:你的 java 代码应该是无状态的,你不应该在变量中存储请求之间的状态,即使是 static
一个。
这里有两个选择:
如果您不want/need跟踪服务器上的会议数量,而只是想要一种唯一标识每个会议的方法,则使用
UUID
class 为每个 convo 生成一个唯一的 id,碰撞风险非常低。 The documentation is here 但典型的代码是:UUID.randomUUID().toString()
如果您想跟踪会议的数量,或将会议 ID 保存在服务器上,您唯一的选择是使用 App Engine 的数据存储等数据库来跟踪变量.如果你是这个主题的新手,我建议你read a bit about transactions,否则你将无法正确管理状态。请注意,App Engine 可以自动为您生成 ID。