【问题标题】:Google App Engine Global Variables(ServletContext)Google App Engine 全局变量(ServletContext)
【发布时间】:2012-04-29 22:39:11
【问题描述】:

我正在尝试用 JAVA 在 GAE 上构建一个聊天应用程序。我需要统计所有在线用户及其网络(某种聊天室),并且这些信息需要不断更新。 我(错误地?)假设我可以只使用 Java 的 SerlvetContext 和 Set/Get Attribute 方法来更新在线\离线用户并与所有 servlet 共享该信息。据我所知(有可爱的错误),由于 GAE 是分布式\云服务,它不能有效地实现 ServletContext.setAttribute - 这意味着我的应用程序可能运行在多个 JVM 上,并且 ServletContext 上的信息仅共享在属于同一个 JVM 的 servlet 之间。

当然,这对我来说是个大问题。 几个问题 - 1) ServletContext 确实不能在 GAE 上正常工作吗? 2)对于像我这样的初学者网络开发者来说,GAE 是不是一个糟糕的选择?在我看来,我总是发现新的问题和不符合 Servlet\JSP 规则的东西。既然初学者学习 Servlets 已经够难了,也许 GAE 不是正确的选择? 3)那么我怎样才能在 Servlet 之间共享信息?

【问题讨论】:

    标签: google-app-engine jakarta-ee servlets


    【解决方案1】:

    如果您真的只是为了自己的目的而尝试学习 Java EE,那么出于您提到的原因,我可能会避免使用 GAE。这是一项非常好的服务,但是是的,它有自己的一套警告,可能会妨碍您的学习。为您的目的启动一个 EC2 实例可能会更好。

    也就是说 - 你是对的,AppEngine 将启动和关闭实例来服务请求。如果你想要共享状态,你应该使用跨实例共享的 memcache,但你必须管理对 memcache 对象的访问,以防止多个用户同时写入它。

    【讨论】:

    • 1)EC2不也是分布式服务吗?我不会在那里面临同样的问题吗? 2) Memcache 真的可以解决我的问题吗?一些指南说 Memcache 不可靠,适用于大多数静态页面,而不是不断变化的页面,并且信息应该在数据库中备份。像这样不断地读写数据库对我来说不是“疯了”吗?疯狂意味着昂贵的金钱
    • 1) 不,不是。 EC2 准确地为您提供了您要求的服务器数量 2) Memcache 对此目的是可靠的,但是是的,如果您希望数据在服务器重新启动时保持不变,则需要保持它。但是,根据应用程序的负载,您将遇到并发问题。数据存储的问题是最终的一致性,如果你的应用是实时的,你将不得不将你的 put 包装在一个事务中。您希望有多少用户使用此应用?
    • 我想我会选择 Memcache,因为整个内容都是为 GAE 编写的。所以总结一下,将我的全局数据(例如在线用户的数组列表)更新到内存缓存中是否是一个好的解决方案?我的应用程序与 gmail\facebook 的工作方式相同 - 它想要刷新在线用户(让我们说每分钟刷新一次)。这是大量的更新,我不想每分钟都访问一个数据库。需要明确的是,我并不是真的希望任何人使用我的应用程序(我会很高兴,但会感到惊讶),但我想了解如何以正确的方式做到这一点。感谢您的帮助瑞克
    • 每分钟更新一次就可以了,在您每秒进行多次更新之前,您不必真正担心并发性。
    • 不,每个实例都是本地的。
    【解决方案2】:

    在谷歌应用引擎中,应用程序状态通常在使用数据存储的实例之间共享。由于您的要求更实时,并且使用轮询可能表现不佳,您应该使用 Channel API(可能除了数据存储之外):

    https://developers.google.com/appengine/docs/java/channel/

    引用该页面:

    Channel API 在您的 应用程序和 Google 服务器,允许您的应用程序发送 实时向 JavaScript 客户端发送消息,而无需使用 轮询。这对于旨在更新用户的应用程序很有用 立即了解新信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2022-07-26
      相关资源
      最近更新 更多