2011-05-12 31 views
3

我想知道是否有可能将xml文件更新从服务器推送到所有客户端浏览器? 基本上我提出的情况是,我的服务器持有一个XML文件,当用户加载一个页面,使用所述XML文件,他们可以请求更改它,如果允许更改(由页面客户端确定),那么XML文件是在服务器端更新。我很好,直到这一点(嗯,我有很多的阅读让我这一点)。然后,我希望所有连接的页面刷新页面中所有依赖于xml文件的元素,而无需刷新整个页面。
换句话说,如果服务器上的副本比他们更新,那么所有那些使用该文件更新副本 - >数据的页面。这是可能通过服务器推,或者我必须不断地轮询服务器比较文件? (这似乎对我来说很sl .. ..)如果可能的话,最好的方法是什么?将服务器上的xml文件更新推送到所有客户端浏览器?

感谢您在正确的方向上的任何点。

回答

3

由于网页是无状态的,因此无法将数据推送到它。您需要轮询服务器以获取更新。考虑一下每5分钟轮询一次的小型ajax脚本,当内容更新时脚本会调用某些内容来更新页面。你会需要很多Ajax来做到这一点;采取jQuery或类似的来实现这一点。

+0

感谢您的快速回复,是否有可能每隔几秒轮询一次服务器,还是会导致速度放慢? – tomatosource 2011-05-12 08:35:07

+0

不,您可以随心所欲地抽出/轮询,问题在于它是多么有用,以及您是否有足够的资源与用户数量相比。如果你只有几个用户,每隔几秒钟轮询一次都不会成为问题。但是,如果你的用户正在阅读一篇文章,你想在阅读文章时改变文章吗?在后一种情况下,5分钟更新会更合适。 – Prikkeldraad 2011-05-12 08:53:55

+0

你可能想看看[长期民意调查](http://en.wikipedia.org/wiki/Push_technology#Long_polling)。如果你有很多并发用户(很多开放的连接),这并不完美。但即时回应变化(如果这很重要)。 – Rudie 2011-05-12 10:05:41

0

您可以尝试AJAX调用到一些PHP脚本,如:

set_time_limit(3600); // one hour or set it as long as your session timeout is 
// Keep on repeating this to prevent PHP from stopping the script 
while (true) 
{ 
    sleep(5); //5 seconds between polling the server 
    //do the updates xml updates 
    flush(); 
    ob_flush(); 
} 

连接将保持开放,并每5秒将XML拉和客户端更新。

如果你不想花费大量的时间和资源,如果它没有改变,你可以使用APC,memcache或任何其他服务器存储的变量,通知你XML已更改。

if(apc_fetch('xml_updated') == 1) 
{ 
    //do the xml pull 
} 

您可以测试一下,如果您试图在资源方面每秒提取数据,会发生什么情况。在我看来,最好有一个更大的延迟。

希望它有帮助!

+1

只是一边不,这不是推,而是拉。推送将从服务器到客户端,服务器不知道它的客户端(没有开放的套接字,也没有人在远程端口上监听),所以它不能推送。它只能由客户端从服务器拉到客户端。 – Prikkeldraad 2011-05-12 08:51:36

+0

@Prikkeldraad的确如此。我做了更新。干杯! – 2011-05-12 09:48:16

相关问题