2012-09-28 87 views
1

我目前正在研究構建一個超過10k個用戶在線連接的聊天系統。我遇到了一些技術和方法,比如jabber(XMPP),websockets,長時間輪詢,推送。就目前而言,考慮到用戶的數量,長時間輪詢可能無法工作。我知道有很多方法可以做到這一點。我也知道Facebook和Google聊天系統是在XMPP上開發的。開發聊天/實時網絡應用程序

如果有人能指出我正確的方向,我會很感激。我相信所有這些方法和技術都取決於項目的規模。我絕對需要性能和可擴展性。

+0

你可能想看看服務器端來解決C10K問題。一種方法是nginx與[http push模塊](http:// pushmodule。slact.net/) – ronalchn

+0

謝謝Ronalchn!這就是我正在做的事情。但是有了所有的選擇,選擇最合適的選擇有點困難。當我選擇一個php框架時,這是同樣的過程。那裏有很多,但是它們具有可擴展性等限制。 – paxtor

+0

非常接近的副本http://stackoverflow.com/questions/11131760/developing-a-mobile-chat-room-backend-use-xmpp-or-websocket/11142357#11142357 – Robin

回答

2

我已經使用Socket.io連同NodeJS這樣的聊天應用程序。它在適度的服務器上擴展到超過10K個併發用戶,並且有很大的發展空間。

這取決於你的侷限性。

  • 您打算使用哪種硬件?
  • 哪個操作系統可以爲您的服務器供電?
  • 您定位的是哪個客戶端平臺?
  • 您是否有現成的基礎設施需要適應?
  • 你有一個以前選擇的編程語言?
  • 您的團隊成員擁有的現有技能以及您的團隊在必要時採用新平臺和語言的能力。

做出決定時考慮以上所有因素。

就我個人而言,我發現XMPP是相當充足的,但對我的目的有點臃腫。因人而異。

+0

感謝您的回覆Lior! – paxtor

+0

感謝您的回覆Lior!在進行我的研究時,我遇到了Socket.io和NodeJS。在當前狀態下:正在實施的語言是PHP,目標平臺是瀏覽器,服務器很可能是Windows支持的,而且它是一個新的基礎架構。根據我的發現,爲這種類型的項目選擇正確的技術至關重要。之前我只用ajax做過這樣的小事。但是,我知道在這種情況下它不會起作用。推送服務器將是選擇,毫無疑問。基於這個事實,你還推薦Socket.io和NodeJS嗎? – paxtor

+0

@Charlie:我之前沒有在Windows服務器上嘗試過nodeJS,所以我實在無法對此進行評論。關於你的目標是瀏覽器,在我看來,像NodeJS + Socket.io應該可以正常工作。如果你真的需要擴展,我真的不會嘗試任何與PHP相關的推送,因爲PHP不適合這種架構。 –

1

你正在比較一個水果籃和三個不同品種的桔子。

XMPP是您提到的實際上旨在支持聊天系統(其中許多存在)的唯一協議。其他是簡單的異步消息協議/技術。 XMPP已通過BOSH支持基於http的聊天。毫無疑問,它還將在規範定稿時支持WebSockets。實際上這個已經寫了draft,但是在這一點上它似乎是使用草稿的草稿,所以可能會有很少的(如果有的話)實現。

使用XMPP將允許您建立一個經過驗證的技術來實現聊天系統,並允許您選擇要在「底層」下使用的傳輸方式。你實際上並沒有說你是否需要一個基於http的傳輸,但是對於XMPP,你可以使用基於tcp套接字的傳輸或基於http的傳輸(BOSH),並知道它將來也會支持WebSocket。

另一個好處是當然這是一個廣泛使用的標準,它允許在幾乎所有流行的(而不是流行的)語言和平臺中重複使用existing clients, servers and libraries

可伸縮性與您引用的數字無關,因爲大多數(可能全部)現有的xmpp服務器將處理那麼多用戶。

+0

偉大的信息,羅賓! – paxtor

+0

偉大的信息,羅賓!正如你可以收集的,我不是這個話題的專家,也不是這個系統開發需要採取的方法。然而,事情正在開始清理。根據你的回答和研究,似乎我需要的不僅僅是一個http服務器(即apache)和一個數據庫來照顧這樣的事情。我的理解是因爲我之前嘗試過一些類似的項目,使用帶有Flash Media服務器的Apache(RTMP協議)通過http提供實時視頻流。看來我現在需要做類似的事情。我很欣賞XMPP上的信息! – paxtor