2009-12-25 51 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爲例)