2011-10-07 89 views
1

我想構建一個支持聊天的多人網頁遊戲應用程序。我認爲應用程序將不得不處理數百個同時連接。阿帕奇與彗星支持

我打算舉辦一個共享的虛擬主機,它有這些限制(最有可能類似於PHP + Comet (long-polling) scaling/hosts)我的應用程序:

  • 似乎它不會我可以改變Web服務器。很可能它使用的是Apache。
  • 支持MySQL 5,PHP 5.3.x,則應Perl,Python和Ruby on Rails的,CGI

(更確切地說,我將使用HawkHost的共享虛擬主機。)

這裏是我的研究成果,其次是我的問題:

  1. 一些資源(如Python Comet Server)說,PHP是不好處理的併發連接,而​​Python是更好的選擇。這是真的?
  2. 我試過了PHP中的長輪詢技術(儘管我不知道它是否正確實現,如Comet issue with abandoned open connections),使用「無限循環直到數據發生變化」。方法。這幾乎可以工作。剩下的問題是,瀏覽器關閉時服務器進程永遠不會停止(服務器不知道連接已經終止,數據也不會改變)。有沒有什麼方法可以檢測瀏覽器是否被終止,以便它停止循環?

我一直在尋找答案,但我仍然無法得出任何結論。這個話題在StackOverflow上也被問過這麼多次,如果我聽起來可能會重複,我很抱歉>。 <。

目前我能夠使用PHP,MySQL和JQuery for JS進行編碼。對於Comet和Server Push這個術語,我還是個新手。如果有必要,我也願意學習Python等新的腳本語言。

我很欣賞任何有關使用哪種腳本語言,框架和技術來啓動我的項目的見解。

+0

前段時間我很想知道。我相信問題不在於PHP,而在於Apache。與彗星相比,Lighttpd的表現要好得多。搜索stackoverflow,有幾個很好的討論。例如:http://stackoverflow.com/questions/603201/using-comet-with-php – ZolaKt

+0

我也遇到過這個線程,以及StackOverflow中的許多相關線程。問題是我僅限於我的共享虛擬主機中的apache。所以我正在尋找我能得到的最佳解決方案,因爲我的情況如上。也許我可以利用Perl或Python來稍微提高性能。但無論如何,感謝您的快速響應,@ZolaKt:D – Arkross

+0

我知道它不是你在找什麼,但通常你可以不用長時間輪詢。無論是否需要,如果您仍然需要定期檢查數據庫,那將是瓶頸。只有通過長輪詢才能得到的請求數量較少,這會導致性能下降,但我認爲,如果db查詢需要更多時間而不是提出請求(這可能總是... ...某些基準測試會很好,但沒有發現任何有用的東西) – ZolaKt

回答

2

當你有一個共享的宿主環境,並且有一些強制執行的限制,那麼外包實時功能是個好主意。我會說這是因爲我爲一家這樣的公司工作,Pusher。但我希望其他人會支持我。

使用託管解決方案時,您可以通過向RESTful API發出HTTP請求來推送通知。該服務然後將消息發送到連接的Web客戶端(瀏覽器)。瀏覽器確實需要包含腳本標記或使用也連接到託管服務的庫。

主要好處是:

  • 沒有安裝或維護
  • 無需處理持久連接 - 沒有資源使用
  • 真正簡單的用法:在應用程序腳本標記,並調用REST API
  • 託管解決方案處理縮放

此外,這裏是一個list of hosted realtime solutions

+0

哇,這是一個不錯的服務列表!我還沒有託管服務的主要概念,但我會嘗試Pusher。謝謝,@leggetter! – Arkross

+0

你的推杆岩石,@leggetter! :D – Arkross

+0

@Arkross真的很高興它爲你工作:) – leggetter

0

所以你可以使用Python。然後你可以使用Tornado。 (psst ... facebook使用它)

而且我也有打開連接的問題。只是不花時間在PHP搜索解決方案 - 後來你會感到抱歉。我曾是。只要使用爲彗星製造的東西。如果你更喜歡JAVA,那麼有:CometD

併爲遊戲獲得一個正常的託管。他們這些天很便宜。

+0

「正常託管」,你的意思是虛擬專用服務器(VPS)?我認爲這是一個很好的解決方案,因爲我可以配置服務器本身,因爲應用程序變得非常大,需要處理更多的連接。我也熟悉Java。感謝您的想法,@ ernestas! – Arkross

+0

是的,我是VPS。您的歡迎:) –