gpt4 book ai didi

java - GAE/GWT 服务器端数据在实例之间不一致/不持久

转载 作者:行者123 更新时间:2023-12-01 19:04:32 25 4
gpt4 key购买 nike

我正在使用 GWT/Java 在 GAE 上编写一个游戏应用程序,但遇到了服务器端持久数据的问题。玩家使用 RPC 轮询 Activity 游戏和游戏状态,所有这些都存储在服务器上。有时客户端轮询无法找到我知道应该存在的游戏实例。仅当我部署到 google appspot 时才会发生这种情况,本地一切都很好。

我知道这可能与 appspot 是一项云服务有关,它可以随时生成并使用我的 servlet 的新实例,并且现有数据不会在实例之间保留。

单个游戏仅持续一两分钟,并且数据会快速变化(每秒多次),那么确保对不同实例的 RPC 调用将使用相同的服务器端数据的最佳方法是什么?

我查看了 DataStore API,它似乎是类似数据库的存储,我猜它对于我的需要来说太慢了。此外,Memcache 可以随时刷新,因此这没有用。

我在这里缺少什么?

最佳答案

这里有两个问题:在请求之间保留数据和从客户端轮询数据。

  1. 当您拥有分布式 Servlet 环境(例如 GAE)时,您无法向一个实例发出请求、将数据保存到内存并期望数据在其他实例上可用。对于 GAE 和任何其他拥有多个服务器的 servlet 环境来说都是如此。

    因此,您需要将数据保存到某些共享存储中:数据存储成本高昂、持久、可靠且缓慢。 Memcache 速度快、免费,但不可靠。通常我们会结合使用两者。有些库甚至透明地将两者结合起来:NDB , objectify .

    在 GAE 上,还有第三个选项可以半持久共享数据: backends 。这些是始终开启的实例,您可以在其中控制启动/关闭。

  2. 数据轮询:如果您有多个客户端等待更新,最好不要使用轮询。轮询会发出大量不必要的请求(服务器上的数据没有更改),并且仍然会有最小延迟(因为您以某个时间间隔进行轮询)。您可以通过 Channel API 进行推送,而不是轮询。甚至还有 GWT 库:gwt-gae-channel , gwt-channel-api .

关于java - GAE/GWT 服务器端数据在实例之间不一致/不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10620315/

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