gpt4 book ai didi

java - GAE Endpoint 类中私有(private)变量的生命周期是多长?

转载 作者:行者123 更新时间:2023-11-30 03:24:18 24 4
gpt4 key购买 nike

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

public class MyEndpoint {
private Integer numberOfConvos=0;
...}

然后我像这样更新它:

@ApiMethod (name="createGroup")
public myModel createGroup(@Named("profile") String profile){
numberOfConvos=numberOfConvos+1;
}

所以每次我进行新的聊天时,我都可以创建一个唯一且不断增加的ID。

如果我重新部署后端(例如错误修复),变量会被重置吗?我不想将这一 token 存储在数据存储中,因为它似乎不需要,而且数据存储会收取读/写费用。

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

如果在我重新部署时没有重置,我如何强制它重置?

最佳答案

为每个线程初始化一个非静态变量。多个线程可以在同一个 App Engine 实例上运行,并且您的 Cloud Endpoint 服务可以在多个实例上并行运行。

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

另请记住,Google 可以随时打开或关闭实例,在这种情况下,您的服务将移至其他实例。 这将重置 numberOfConvos 变量

更笼统地说:您的 Java 代码应该是无状态的,您不应该将请求之间的状态存储在变量中,即使是 static 变量也是如此。

这里你有两个选择:

  • 如果您不想/不需要跟踪服务器上的 convo 数量,而只是想要一种唯一标识每个 convo 的方法,请使用 UUID 类生成每个车队都有唯一的 ID,碰撞风险非常低。 The documentation is here但典型的代码是:

    UUID.randomUUID().toString()
  • 如果您想要跟踪 convo 的数量,或将 convo id 保留在服务器上,您唯一的选择是使用数据库(例如 App Engine 的数据存储区)来跟踪变量。如果您是这个主题的新手,我建议您 read a bit about transactions ,否则你将无法正确管理状态。请注意,App Engine 可以自动为您生成 ID。

关于java - GAE Endpoint 类中私有(private)变量的生命周期是多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com