2012-06-28 28 views
2

我正在構建一個軟件系統,它使用Javascript來顯示服務器任務的可編輯隊列(例如,程序xyz一次在服務器上執行一項任務) 。Web應用程序需要記住對象狀態 - 需要解決方案的建議

  1. 瀏覽器用戶界面(OO的JavaScript和JQuery)
  2. AJAX
  3. [缺少技術問題]
  4. Linux的PHP(即觸發應用運行的腳本)

現在UI QUeue的效果很好,但如果有人關閉瀏覽器,JavaScript隊列UI應用程序的狀態就會丟失(我的Linux機器上的程序應執行的所有任務)

那麼如何實現呢?我需要一個Web應用程序作爲服務在我的RedHat服務器上運行,與我寫的面向對象的JavaScript應用程序進行通信。服務器任務已經通過PHP獲取。

這可能與PHP?我想避免在這個時候有一個數據庫。 Java/Tomcat解決方案也值得思考。你怎麼看?感謝您閱讀這些。

+1

「我想避免在這個時候有一個數據庫」爲什麼?它是堅持數據的正常機制。但是,是的,Java可以在服務器上存儲狀態,也可以通過不同的方式存儲狀態 – NimChimpsky

+0

好的,在這種情況下,我打開DB解決方案... – nottinhill

回答

0

您需要將服務器上的隊列狀態至少保存到內存中,最好也保存到磁盤上。要在內存中創建兩個類QueueQueueEntry前者由後者組成。如果只保留內存,如果服務器進程重新啓動,則會丟失隊列狀態 - 因此,如果要通過重新啓動維護狀態,請將其寫入磁盤。假設Java,執行必要的操作使這些類Serializable並使用ReadWriteLock寫出到磁盤以避免爭用。

更新,以反映使用DB

相反系列化,有隊列條目表。添加一列來指示訂單 - 最有可能插入日期。

+0

好的解決方案。什麼是最優雅的方式來做到這一點;沒有語言,數據庫選擇等方面的限制? – nottinhill

+0

如果你使用的是OO語言,那麼這些對象可以寫成,如果不是對象,我可能會使用散列數組。至於序列化 - 這是解決你的無DB的約束 - 大多數OO語言都有一些內置的序列化(參見PHP序列化:http://php.net/manual/en/language.oop5.serialization.php)否則你需要推出你自己的格式 - 最有可能的XML或JSON。 – orangepips

+0

PHP文檔說:「使用序列化保存對象將保存對象中的所有變量」。這對我的口味來說太模糊了。將參考保存的值或變量本身的值?將對象和它們的狀態存儲在數據庫中的聲音非常好 - 我想用MySQL我將不得不使用序列化,或者對面向對象的數據庫有建議? – nottinhill