与php保持实时连接?

时间:2009-04-26 19:41:55

标签: php performance keep-alive output-buffering

我正在研究一个项目让我经常ping一个PHP脚本来获取新数据,所以如果我理解正确,这意味着被ping的php脚本无限期地运行。它可以工作,但我猜它在服务器上的巨大压力,可能被认为是丑陋和不好的做法。我是对的吗?

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

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

最后一件事......

还有其他方法可以保持数据的持续流动(不包括闪存或银光等技术)吗?

5 个答案:

答案 0 :(得分:4)

如果您目前的工作正常并且在针对此应用程序中可能出现的负载类型进行测试时继续工作,则实际上并不认为这是不好的做法。如果它有效,保持简单并不是犯罪。任何你所描述的东西都会违背原始网络模型,所以你冒险进入不稳定的领域。

我建议您查看Comet技术。它主要用于你想要的反向 - 服务器不断地将信息推送到页面 - 但它显然可以双向工作。虽然你的里程可能会有所不同,但我听到了好消息。正如维基百科所描述的那样:

  

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

答案 1 :(得分:0)

看起来php似乎不是这种语言的最佳选择。可能会考虑像scala或erlang这样的设置来更好地处理这种类型的长寿命消息。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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