【问题标题】:Keeping a live connection with php?与php保持实时连接?
【发布时间】:2010-10-21 22:41:14
【问题描述】:

我正在做一个项目,让我不断地 ping 一个 php 脚本以获取新数据,所以如果我理解正确,这意味着被 ping 的 php 脚本会无限期地反复运行。它可以工作,但我猜它对服务器造成了巨大的压力,并且可能被认为是丑陋和糟糕的做法。我说的对吗?

有什么方法可以保持与脚本的连接并利用 php 的内置输出缓冲来刷新我需要的内容,但使用某种循环保持脚本无限运行,以便在新数据可用时可以输出。这也是个坏主意吗?

我只是在寻找有更多经验的输入表单开发人员。

最后一件事......

是否有任何其他方法可以保持数据的持续流动(不包括 flash 或 silverlight 等技术)?

【问题讨论】:

    标签: php performance keep-alive output-buffering


    【解决方案1】:

    如果您当前的工作和在针对此应用程序中您可能期望的负载进行测试时继续工作,那么这并不是真正的错误做法。如果它有效,保持简单并不是犯罪。任何符合您所描述的内容都将违背网络原始模型的规律,因此您正在冒险进入摇摇欲坠的领域。

    我建议您查看Comet 技术。它通常与您想要的相反 - 服务器将信息连续推送到页面 - 但它显然可以双向工作。尽管您的里程可能会有所不同,但我听说了一些好事。正如维基百科所描述的那样:

    在 Web 开发中,Comet 是一个新词,用于描述一种 Web 应用程序模型,其中长期持有的 HTTP 请求允许 Web 服务器将数据推送到浏览器,而无需浏览器显式请求。 Comet 是实现这种交互的多种技术的总称。所有这些方法都依赖于浏览器中默认包含的功能,例如 Javascript,而不是非默认插件。

    【讨论】:

      【解决方案2】:

      似乎 php 不是最好的语言选择。可能考虑使用诸如 scala 或 erlang 之类的东西来更好地处理这种类型的长期消息传递。

      【讨论】:

      • 我同意,但我愿意接受挑战。
      【解决方案3】:

      您必须学习如何在 php 中使用套接字。

      从这里开始:http://php.net/manual/en/book.sockets.php

      这里是关于编写独立 php 应用程序的有用手册:Advanced PHP Programming

      【讨论】:

        【解决方案4】:

        我会说这取决于。如果您希望客户端启动数据传输,那么您最好的选择是一些 ajax(如 getxmlhttpobject 或 iframe,如果您想作弊:P)。如果您希望由服务器启动传输,那么,也许 php 不是您要使用的语言。

        【讨论】:

          【解决方案5】:

          您可以使用 ajax 来进行 http-streaming。看看ajaxpatterns

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-08-14
            • 2014-01-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-25
            相关资源
            最近更新 更多