【问题标题】:Web Application needs to remember object states - Suggestion for solution neededWeb 应用程序需要记住对象状态 - 需要解决方案的建议
【发布时间】:2012-06-28 12:41:27
【问题描述】:

我正在构建一个软件系统,它使用 Javascript 来显示一个可编辑的服务器任务队列(比如程序 xyz 一次在服务器上执行一项任务)。

  1. 浏览器 UI(O-O JavaScript 和 JQuery)
  2. AJAX
  3. [缺少相关技术]
  4. Linux PHP(触发应用程序运行的脚本)

现在 UI 队列工作得很好,但是如果有人关闭他们的浏览器,JavaScript 队列 UI 应用程序的状态就会丢失(我的 linux 机器上的程序应该执行的所有任务)

那么如何实现呢?我是否需要在我的 RedHat 服务器上作为服务运行的 Web 应用程序与我编写的面向对象的 JavaScript 应用程序通信。服务器任务已经通过 PHP 征用。

这可以通过 PHP 实现吗?我想避免此时拥有数据库。 Java/Tomcat 解决方案也浮现在脑海中。你怎么看?感谢您阅读本文。

【问题讨论】:

  • “我现在想避免拥有数据库”为什么?它是持久化数据的正常机制。但是是的,java 也可以在服务器、php 上以各种不同的方式存储状态
  • 好的,在这种情况下,我愿意接受数据库解决方案...

标签: java javascript object servlets state


【解决方案1】:

您需要将服务器上的队列状态至少保存到内存,最好也保存到磁盘。为了在内存中表示创建两个类QueueQueueEntry,前者由后者组成。如果您只保留到内存,那么如果服务器进程重新启动,您将丢失队列状态 - 因此,如果您想通过重新启动来保持状态,请写入磁盘。假设使用 Java,请执行必要的操作以使这些类 Serializable 并使用 ReadWriteLock 写出到磁盘以避免争用。

更新以使用数据库进行反射

有一个队列条目表,而不是序列化。添加一列以指示顺序 - 最有可能插入日期。

【讨论】:

  • 不错的解决方案。最优雅的方法是什么?没有语言、数据库选择等方面的限制?
  • 如果您使用的是 OO 语言,那么可以用这种语言编写对象,如果不是对象,我可能会使用哈希数组。至于序列化——它可以解决你没有 DB 的限制——大多数 OO 语言都内置了某种序列化(参见 PHP 序列化:php.net/manual/en/language.oop5.serialization.php),否则你需要推出自己的格式——很可能是 XML 或 JSON。
  • PHP 文档说:“使用序列化保存对象将保存对象中的所有变量”。这对我的口味来说有点太模糊了。是对保存的值的引用还是变量本身的值?将对象及其状态存储在数据库中听起来非常好 - 我想使用 MySQL 我也必须使用可序列化,或者对面向对象的数据库有建议吗?
猜你喜欢
  • 2018-12-11
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
相关资源
最近更新 更多