2009-12-25 52 views
5

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

在此先感谢。

+0

Duplicate:http://stackoverflow.com/questions/603201/using-comet-with-php – jvenema 2010-02-04 15:23:23

回答

0

您不必学习一种新的语言来实现这样的功能。

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

+0

听说在JAVA实现中有一个PHP非常有趣。正如我在文档中读到的,它比传统的PHP-APACHE模块更快,但我真的很困惑。据我了解,Resin将提供PHP页面而不是apache,但是我如何使用JVM实现Comet服务器应用程序?我应该使用一些JAVA功能吗?原谅我,我是这个技术的新手,我在JAVA中没有任何经验。谢谢 – codemaker 2009-12-25 16:30:57

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/

+0

非常感谢您的信息。 我会尝试一下。 – codemaker 2009-12-25 17:47:23

0

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

package中提供英文Readme.txt。

+0

对不起,链接已死。 – codemaker 2009-12-25 16:32:13

+0

它适合我。尝试从此页面下载:http://github.com/DmitryKoterov/dklab_realplexor/ – 2009-12-25 19:51:11

2

我听过人们说PHP并不适合COMET (就像你自己说的)是因为webservers和PHP的工作原理 - 主要是因为每页有一个进程,意味着如果你想让200个用户连接到你的服务器,你需要200个进程(这可能很快成为一个数百个用户的问题)

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

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

+0

有趣。有没有任何如何使用它的例子。例如,如何将数据从PHP脚本推送到一个浏览器? – codemaker 2009-12-25 16:20:20

+0

我还没有看到任何PHP示例,不幸的是;-(;;我可能会尝试某一天,但不会在不久的将来......但是,如果您尝试自己,或者发现任何有趣的东西, m对你感兴趣的是什么;-) – 2009-12-25 16:23:14

0

你首先需要了解什么是彗星的应用程序等。参与建设彗星应用程序的概念是在维基在Comet (programming)

解释你需要了解什么是你可以使用任何编程语言,只要建立一个彗星的应用程序,因为它遵循的概念在维基解释

1.长轮询的阿贾克斯

2。流

您可以在Simple “Long Polling” example code

查了一些示例代码现在来的问题 -

1.You使用AJAX长轮询然后在浏览器(Ajax请求)将继续轮询服务器的数据。这可能会消耗服务器上的内存,或者在一段时间后放慢浏览器速度。

几点建议

JQuery PeriodicalUpdater (AJAX long polling/server polling)

Handling Long Polling

RobertFischer/JQuery-PeriodicalUpdater

你需要检查什么来实现这一点 -

一)你是否经常希望数据被更新服务器。

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

How to implement COMET with PHP

Lightstreamer Dojo

Dojo Charting + Lightstreamer Comet Demo

Demo

Ajax Push Engine or The APE Project

-

2.You可以通过以下实现流3210

你需要检查这一点 -

一)将你的托管服务提供商允许您托管服务器

B)您的RAM和带宽利用率上安装这些(您将需要包装的专用服务器给你很多的RAM和带宽)

这取决于你的要求是什么和如何。你将不得不分析和处理。

如果您正在实施的是一个小型应用程序,您可以进行Ajax长轮询,因为您已经分析并处理了此方法的负面影响。

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

1

我当时在做一个学校项目,遇到了同样的问题。由于每个PHP进程都有很多内存开销,因此无法支持每个盒子的多个连接。正是在这一点上,我决定切换到使用BOSHXMPP。这是一个相当新的“技术浪潮”,但已有相当多的图书馆可以帮助你。我会建议使用StropheXMPPHP。然后,您的客户可以连接到BOSH服务器(我使用的是Openfire),并且可以扩展到每台服务器上数千个活动连接。

0

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

+0

彗星是长时间轮询的Ajax,PHP不会让你修改典型的页面/请求模型,所以很难用Comet和PHP获得好的结果 – Michael 2010-03-24 05:00:01

0

对于像这样的东西,Node.js似乎是一个非常好的解决方案。 (对于制作还是有一点玩意儿,但都很酷)。对于像这样的东西,PHP是一个可怕的环境,你必须改变服务器与请求交互的方式,因为你不再立即响应。 Python有一些像Twisted这样的服务器,因为它们让你成为服务器。无论您使用何种语言编写代码,都必须改变典型的请求/响应模式。 (Glassfish的灰熊彗星服务器以Java为例)