【问题标题】:push an xml file update from server to all client browsers?将 xml 文件更新从服务器推送到所有客户端浏览器?
【发布时间】:2011-08-23 22:24:19
【问题描述】:

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

感谢您提出正确方向的任何观点。

【问题讨论】:

    标签: php xml ajax web-applications html


    【解决方案1】:

    您可以尝试对某个 php 脚本进行 AJAX 调用,例如:

    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
    }
    

    如果您尝试在资源方面每秒提取数据,您可以测试会发生什么。在我看来,最好有更长的延迟。

    希望对你有帮助!

    【讨论】:

    • 只是一个侧面,这不是推,而是拉。推送将是从服务器到客户端,服务器不知道它的客户端(没有打开的套接字,也没有人在远程端口上监听),所以它不能推送。它只能由客户端从服务器拉到客户端。
    【解决方案2】:

    由于网页是无状态的,因此您无法向其推送数据。您需要轮询服务器以获取更新。考虑一个大约每 5 分钟轮询一次的小型 ajax 脚本,当内容更新时,该脚本会调用一些东西来更新页面。你需要大量的 ajax 才能做到这一点;使用 jQuery 或类似方法来完成此操作。

    【讨论】:

    • 感谢您的快速回复,是否可以每隔几秒轮询一次服务器,或者这会导致速度大大降低?
    • 不,您可以随心所欲地拉取/投票,问题在于它有多大用处,以及与用户数量相比您是否有足够的资源。如果您只有几个用户,那么每隔几秒钟轮询一次不会有问题。但是,如果您的用户正在阅读一篇文章;您希望他们在阅读文章时更改文章吗?因此,在后一种情况下,我会更合适地刷新 5 分钟。
    • 您可能想查看long poll。如果您有很多并发用户(很多打开的连接),这并不完美。但对变化的即时响应(如果这很重要的话)。
    • 长时间轮询 - 这正是医生所要求的,谢谢。
    • 只是对以后偶然发现此问题的任何人的评论-非常简单的最佳选择是寻找长轮询ajax聊天示例,真的很容易找到。但是我遇到了延迟问题,所以正在寻找其他解决方案。
    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 2011-04-02
    • 2015-09-15
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多