Php 数据更改时如何更新UI?

Php 数据更改时如何更新UI?,php,javascript,xml,events,data-binding,Php,Javascript,Xml,Events,Data Binding,我有一系列XML文件,用户可以检索、编辑和保存这些文件。我的目的是允许多个用户同时编辑这些文件。这些XML文件的许多部分都与浏览器UI中显示的内容相关,例如,将显示一个My title节点,并且可以对其进行编辑 我使用的技术是Javascript、PHP和包含对其他XML文件的引用的主XML文件(主文件和引用文件都可以在UI中编辑)。服务器启用WebDAV,通过YUI3的io模块使用WebDAV方法来处理检索、保存、集合移动等 如何根据编辑和保存的XML文件的内容更新使用这些资源的UI 我知道我

我有一系列XML文件,用户可以检索、编辑和保存这些文件。我的目的是允许多个用户同时编辑这些文件。这些XML文件的许多部分都与浏览器UI中显示的内容相关,例如,将显示一个
My title
节点,并且可以对其进行编辑

我使用的技术是Javascript、PHP和包含对其他XML文件的引用的主XML文件(主文件和引用文件都可以在UI中编辑)。服务器启用WebDAV,通过YUI3的io模块使用WebDAV方法来处理检索、保存、集合移动等

如何根据编辑和保存的XML文件的内容更新使用这些资源的UI

我知道我可能可以运行settimeout之类的工具来检查更新,但让UI只在数据更改时响应似乎更直观


干杯

您描述的功能类似于一种称为服务器推送的技术。对于web应用程序来说,您要做的是一件非常棘手的事情(特别是对于PHP,它是围绕请求得到服务和脚本终止的思想构建的)

HTML5正在引入websockets等技术来维护与服务器的持久连接,你可以将websockets作为一种解决方案,但这是一种全新的技术,我认为该规范甚至还没有最终确定,因此它只会在最新版本的浏览器中实现,如果有的话

您已经提到了AJAX轮询(由setInterval驱动),但是您也注意到它有问题。当然,你是对的,在两次轮询之间,本地数据可能会过时,并且你会在服务器和任何打开的客户端之间产生大量流量

另一种选择是所谓的“长轮询”。其思想是客户机与服务器启动一个AJAX会话。在服务器上,客户机调用的脚本基本上只是坐在那里等待更改。当它这样做时,服务器通过发送JSON/XML/任何响应并关闭AJAX会话来通知客户机。当客户机接收到响应时,它将对其进行处理并启动一个新的AJAX连接,以等待另一个服务器响应

这种方法几乎是即时的,因为数据一可用就被推送到客户机。然而,这也意味着大量与服务器的开放连接,这会使服务器承受很大的负载。此外,由于构建该语言的请求-响应模型,PHP脚本实际上并不打算长时间运行或休眠。采用这种方法是可能的,但可能不可取

有一些长轮询技术的示例


祝你好运

你可能还想看看哪个描述了长轮询(又名COMET)技术,更一般的术语是Antastic信息,谢谢GordonM。我已经阅读了这些链接和一些螺旋形的资源——我知道一定有一个术语来描述我正在尝试做的事情。“长轮询”和“Comet”让我找到了一个YUI3 Gallery模块,据称该模块通过带有IE回退功能的EventSource处理长轮询。FWIW,我的项目在很长一段时间内不需要扩展超过25个用户。这是Node.js服务器擅长的功能吗?我无法对Node.js进行评论,因为我从未使用过它。然而,考虑到它基于javascript,因此有一个事件模型,我认为它能够更好地应对。我相信您已经从链接中读到了,您还需要担心的是每个请求都会占用Apache资源。是的,我还没有完全准备好离开Apache,但也许有一天:)对于不打算大规模生产的基本web服务器,是否有一个通用的资源使用“经验法则”?我应该担心20个甚至50个用户使用长轮询吗?我怀疑50个用户会受到太大的伤害。