我正在尝试使用 JAVA 在 GAE 上构建聊天应用程序。我需要统计所有在线用户及其网络(某种聊天室),并且需要不断更新此信息。 我(错误地?)假设我可以只使用 Java 的 SerlvetContext 和 Set/Get Attribute 方法来更新在线\离线用户并与所有 servlet 共享该信息。正如我所知道的(有可爱的错误),由于 GAE 是分布式\云服务,它没有有效地实现 ServletContext.setAttribute - 这意味着我的应用程序可能运行在多个 JVM 上,并且有关 ServletContext 的信息仅共享在属于同一个 JVM 的 servlet 之间。
当然,这对我来说是个大问题。 几个问题 - 1) ServletContext 在GAE 上确实不能正常工作吗? 2)GAE 对于像我这样的初学者 Web 开发者来说是一个糟糕的选择吗?在我看来,我总是发现新的问题和不符合 Servlet\JSP 规则的东西。由于初学者学习 Servlets 已经够难了,也许 GAE 不是正确的选择? 3)我如何在 Servlet 之间共享信息?
最佳答案
如果您真的只是为了自己的目的而尝试学习 Java EE,我可能会因为您提到的原因而避免使用 GAE。这是一项非常好的服务,但是是的,它有自己的一套警告可能会妨碍您的学习。为您的目的启动一个 EC2 实例可能会更好。
就是说 - 你是对的,AppEngine 会启动和关闭实例来满足请求。如果你想要共享状态,你应该使用跨实例共享的 memcache,但是你必须管理对 memcache 对象的访问,以便多个用户同时写入它的可能性。
关于google-app-engine - Google App Engine 全局变量 (ServletContext),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210734/