2011-11-30 57 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

相关问题