Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GAE端点类中私有变量的生命周期是多少?_Java_Google App Engine_Variables_Google Cloud Endpoints - Fatal编程技术网

Java GAE端点类中私有变量的生命周期是多少?

Java GAE端点类中私有变量的生命周期是多少?,java,google-app-engine,variables,google-cloud-endpoints,Java,Google App Engine,Variables,Google Cloud Endpoints,我有一个即时通讯风格的应用程序的以下代码 public class MyEndpoint { private Integer numberOfConvos=0; ...} 然后我更新它如下: @ApiMethod (name="createGroup") public myModel createGroup(@Named("profile") String profile){ numberOfConvos=numberOfConvos+1; } 因此,每次我进行新的聊天时,我都可以创

我有一个即时通讯风格的应用程序的以下代码

public class MyEndpoint {
private Integer numberOfConvos=0;
...}
然后我更新它如下:

@ApiMethod (name="createGroup")
public myModel createGroup(@Named("profile") String profile){
    numberOfConvos=numberOfConvos+1;
}
因此,每次我进行新的聊天时,我都可以创建一个独特且不断增加的ID

如果我重新部署后端(例如bug修复),变量会被重置吗?我不想将这一个令牌存储在数据存储中,因为它似乎不需要,而且数据存储对读/写操作收费

如果每次部署时都会重置它,那么跟踪此变量的正确方法是什么


如果在重新部署时未重置is,如何强制重置?

为每个线程初始化一个非
静态变量。多个线程可以在同一个应用程序引擎实例上运行,您的云端点服务可以在多个实例上并行运行

假设给定当前负载,云端点服务通过3个实例I1、I2、I3提供。我们还假设每个实例运行5个线程。在这种情况下,您将拥有15个不同值的
numberofconvas
15个不同版本

请记住,谷歌可以随时打开或关闭实例,在这种情况下,您的服务将被移动到另一个实例这将重置
numberofconva
变量

更一般地说:java代码应该是无状态的,不应该将请求之间的状态存储在变量中,即使是
静态变量

您有两种选择:

  • 如果您不想/不需要跟踪服务器上的车队数量,只想找到一种唯一标识每个车队的方法,那么使用
    UUID
    类为每个车队生成一个唯一的id,冲突风险非常低。但典型的代码是:

    UUID.randomUUID().toString()
    
  • 如果要跟踪车队的数量,或在服务器上持久保存车队ID,您唯一的选择是使用数据库(如App Engine的数据存储)来跟踪变量。如果你是这方面的新手,我建议你,否则你将无法正确管理状态。请注意,应用程序引擎可以自动为您生成ID


正如我在文章中提到的,我不想把它保存在数据存储中,因为我们会发生很多读/写操作,而且当我读/写该实体时会在全局范围内锁定1。对于聊天应用来说,这并不是一件可以接受的事情。我总是可以生成一个随机ID,并检查该ID是否在以前生成过(我在另一个地方这样做),但是我对CPU开销不满意。如您所见,还有其他选择吗?如果您改变主意并想使用数据存储,您可能需要查看切分计数器。如果id格式对您不重要,并且您不想在数据存储中存储数据,请使用UUID生成一个随机id,并强烈保证它不存在。请将UUID作为答案写入,我将选择它。