2011-11-30 81 views
0

目前,我有很多客戶端連接將數據發送到服務器,然後將數據聚合到XML文件中。然後,客戶端可以每隔1秒通過AJAX查看一個網頁,以更新文件的最新內容。在不使用文件的情況下在網頁上顯示XML數據

我的問題是,有沒有人有任何建議,我可能會跳過一起寫文件,並以某種方式將XML數據直接發送到網頁?現在我每2秒寫一次文件,但希望以更高的頻率(也許是0.75秒)完成此操作,寫入文件的速率可能會成爲昂貴的操作以及硬盤的總體健康狀況。

Web部分使用php(在Apache 2.2上),所以我想可能讓頁面創建一個到服務器的套接字連接,並且服務器可以寫入該套接字並且頁面可以在數據被壓下時更新,但我想知道是否有更好的方法來完成這種類型的任務。

的XML文件一般沒有那麼大,小於10KB,所以如果我的擔憂是沒有根據的,比我想聽到這一點。

+0

當您收到數據時,您不會立刻寫入數據,而是每隔2秒鐘週期性寫入數據?爲什麼? – gigadot

+0

假設我有20個客戶端,每個客戶端每0.5秒發送一次更新,所以如果我每次寫入的數據都是基於每個客戶端的話,那麼每隔0.1秒或更少時間就會產生一次寫入。目前,最新的客戶端更新保存在客戶端的對象中,當xml編寫器被觸發時,它從每個客戶端對象中提取這些數據並寫入它。 – Andrew

回答

1

您可以使用類似PHP的DomDocument建立在內存中的文件,然後使用DOMDocument::saveXML呼應出來 - 看http://www.php.net/manual/en/domdocument.savexml.php

而不是再使用AJAX調用文件/something/something/darkside/something.xml你會改爲調用/something/something/darkside/something.xml.php(例如) - 並且該PHP文件只會丟棄XML。

要確保它被解釋爲XML它是最好的,包括像頭:

header('Content-type:text/xml;charset=utf-8'); 

但是... 我覺得你的問題有一個與保存這些數據呢?據我瞭解,我可能在這裏是錯誤的,你有很多客戶創建一個單一的,保存的資源(以XML文件的形式),由所有客戶執行的操作更新?

這意味着你必須在服務器上的某個地方保存一些東西。這意味着你實際上有2個選項,將數據保存到文件中(如你所做的那樣)或者保存在數據庫中(儘管技術上甚至是數據庫都將文件寫入文件系統)。

個人而言,我會使用一個數據庫 - 他們專爲繁重的工作和INSERT(或UPDATE)使用DomDocument::saveXML XML格式的數據......你最終的東西(概念),如:

$db->query("INSERT INTO table({fields}) VALUES({values including $xmlDomDoc->saveXML())}"); 

然後在你需要的時候再讀回來...可能與你正在使用的原理相同,但在數據庫而不是基於文件的系統中使用它。

+0

正確,XML文件是包含所有客戶端信息的單個已保存資源。該文件定期更新(此刻每2秒寫入一次)所有客戶端提供的信息。 我將研究在文本文件上使用數據庫的效率。 – Andrew

+0

我認爲這是一個好方法(但是,由於涉及數據庫,它確實增加了複雜性)。當客戶端向服務器發送更新時,服務器會將數據保存到數據庫中。然後,當客戶端請求XML文檔時,服務器將使用數據庫中的數據從頭開始動態構建XML文檔。而且,將數據存儲在數據庫中可以爲操作數據提供更多的權力。例如,如果您決定希望XML文檔中的數據按日期字段排序,該怎麼辦?這將很容易用數據庫來完成。 – Michael

相關問題