COMET和PHP的解决方案

时间:2009-12-25 13:59:55

标签: php comet

COMET和PHP组合有真正的解决方案吗?基本上,当数据库中有新数据时,我需要定期更新用户主页。据我了解,我需要在我的服务器和客户端浏览器之间打开持久连接,以便在新信息发布后立即更新其主页的内容。虽然没有投入大量资源但我没有找到任何关于这个问题的清楚的事情。我读过很多文章都认为PHP不是实现COMET的好语言。我的Web应用程序完全用PHP编程,我不想学习另一种语言,但如果我被迫,你会建议一个好的语言开始吗?你认为我可以编程一个接口来处理这个问题吗?

提前致谢。

8 个答案:

答案 0 :(得分:2)

我听过人们说PHP不太适合COMET (就像你自己说的那样)是因为网络服务器和PHP工作的方式 - 主要是因为有一个进程每页,这意味着如果您希望200个用户连接到您的服务器,您将需要200个进程(这可能很快成为另外几百个用户的问题)

也许解决这个问题的方法是使用nginx_http_push_module

我还没试过(还有?),但它可能正是我们需要的......

答案 1 :(得分:1)

我正在研究一个学校项目并遇到了同样的问题。因为每个PHP进程都有如此多的内存开销,所以不可能支持每个框的许多连接。就在这时,我决定转而使用BOSHXMPP。这是一个相当新的技术“浪潮”,但已经有相当多的图书馆可以帮助您。我建议使用StropheXMPPHP。然后您的客户端可以连接到BOSH服务器(我正在使用Openfire),并且可以扩展到每台服务器的数千个活动连接。

答案 2 :(得分:0)

您无需学习新语言即可实现此类功能。

例如,您可以使用Quercus(PHP的Java实现)并使用JVM内存管理模型实现服务器Comet应用程序。

答案 3 :(得分:0)

您需要解决方案:

  1. 几乎COMET解决方案(使用php和一个用perl编写的文件): http://translate.google.com/translate?js=y&prev=_t&hl=ru&ie=UTF-8&layout=1&eotf=1&u=http://dklab.ru/lib/dklab_multiplexor/&sl=ru&tl=en

  2. 在php中确切的COMET解决方案(我想这就是你想要的): http://translate.google.com/translate?hl=ru&sl=ru&tl=en&u=http://dklab.ru/lib/dklab_realplexor/

答案 4 :(得分:0)

你应该尝试Dmitry Koterov的Realplexor,它是一个彗星服务器,提供Javascript和PHP API。

英语中的Readme.txt在package中提供。

答案 5 :(得分:0)

您首先需要了解彗星应用程序是什么样的。构建彗星应用程序所涉及的概念在wiki Comet (programming)

中进行了解释

您需要了解的是,只要遵循wiki中解释的概念,您就可以使用任何编程语言来构建彗星应用程序

1.Ajax长轮询

2.Streaming

您可以在Simple “Long Polling” example code

查看一些示例代码

现在遇到问题 -

1.您使用ajax长轮询然后浏览器(ajax请求)将继续轮询服务器以获取数据。这可能会占用服务器上的内存,或者在一段时间后减慢浏览器的速度。

几点建议

JQuery PeriodicalUpdater (AJAX long polling/server polling)

Handling Long Polling

RobertFischer / JQuery-PeriodicalUpdater

您需要检查以实现此目的 -

a)您希望在服务器上更新数据的频率。

b)在将数据发送到客户端之前,服务器端脚本运行多长时间来检查,获取和处理数据。

2.您可以使用以下内容实现流式传输 -

How to implement COMET with PHP

Lightstreamer Dojo

Dojo Charting + Lightstreamer Comet Demo

Demo

Ajax Push Engine or The APE Project

您需要检查什么 -

a)您的托管服务提供商是否允许您在托管服务器上安装这些

b)您的RAM和带宽利用率(您需要一个专用服务器,其中包含大量RAM和带宽)

这取决于您的要求是什么以及如何。你将不得不分析和接近。

如果您正在实施的是一个小型应用程序,那么您可以进行Ajax Long轮询,因为您分析并处理了这种方法的不利因素。

如果你有一个大型应用程序,你可以去蒸。

答案 6 :(得分:0)

使用长轮询的Ajax是一个简单的解决方案,jquery中有插件和任何其他主要的js框架来帮助你做到这一点。

答案 7 :(得分:0)

对于像这样的东西,Node.js似乎是一个非常好的解决方案。 (仍然有点生产,但所有相同的凉爽)。对于像这样的东西,PHP是一个糟糕的环境,你必须改变服务器与请求交互的方式,因为你不再立即响应。 Python有一些像Twisted这样的服务器,因为它们让你成为服务器。无论你用什么语言写它,你都必须改变典型的请求/响应模型。 (Glassfish的Grizzly Comet服务器以Java为例)