2011-11-21 32 views
1

我正在考慮讓openfire服務器啓動並設置一個strophe.js客戶端來連接它。我擔心的是,使用http-bind與XMPP連接直接相比,在性能方面可能代價高昂。OpenFire,HTTP-BIND和性能

任何人都可以告訴我,我的擔心是否相關?如果是的話,到什麼程度?

另一種方法是使用Flash代理與OpenFire進行所有通信。

謝謝

+0

您是否問過在Openfire或BOSH中BOSH的性能? – Zash

+0

一般來說,雖然如果你有信息分享Openfire的實現,我會很高興聽到它:) – Naatan

回答

3

BOSH比正常XMPP更冗長,特別是閒置時。一個閒置的BOSH連接可能每分鐘約有2個HTTP請求,而一個正常的連接可以閒置幾個小時甚至幾天而不需要發送一個數據包(理論上,實際上,你將擁有ping和保持活動來對抗NAT和破壞的防火牆) 。

但是,唯一真正知道的方法是基準。根據您的使用情況以及您的客戶正在做什麼,差異可能可以忽略不計。

0

我結束瞭如何使用Node.js和http://code.google.com/p/node-xmpp-bosh,我遇到了一些困難,直接通過BOSH連接到Openfire的。

我有一個運行node.js的生產站點,它配置爲代理所有BOSH請求,並且它像一個魅力一樣工作(大約50個併發用戶)。目前唯一的缺點是:在Openfire管理控制檯中,您將看不到所連接客戶端的實際IP地址,只有本地服務器地址纔會顯示,因爲Openfire從node.js服務器獲得連接。

+0

我很感激你花時間評論我的問題,但你並沒有真的試圖回答它。我的問題是關於性能,以及一個解決方案對另一個解決方案的影響有多大。爲了記錄,我正在研究潛在數千甚至數百萬用戶的實現。 – Naatan

1

基礎:

Socket - zero overhead. 

HTTP - requests even on IDLE session. 

我懷疑,你將有100萬用戶在一次,但如果你的目標吧,然後像HTTP連接如無協議會好很多,因爲我不知道任何操作系統都可以支持這種連接的套接字卷。另外,你可以將你的OpenFires捆綁在一起,組成一個農場,你將在那裏擁有很好的可擴展性。

1

我們在同一個MUC頻道中使用了大約400個併發用戶的Openfire和BOSH。 我們注意到Openfire泄漏內存。我們使用了大約1.5-2GB的內存,並且出現了內存不足的例外情況。 另外,Openfire的BOSH實現相當糟糕。然後我們切換到punjab這更好,但無法解決開火問題。

我們現在使用ejabberd和它們內置的http綁定實現,並且它可以很好地擴展。在運行ejabberd的服務器上的負載接近0.

目前我們面臨的問題是,我們用於處理聊天負載的5個Web服務器有時會在大約200個連接的用戶上超載。 我想現在使用websockets,但它似乎還沒有工作。 可能不是通過Apache重寫規則重定向http綁定,而是直接在loadbalancer/proxy上解決問題,但我找不到如何實現這個atm的方法。

希望這會有所幫助。

+0

感謝您的回覆,請問您使用Openfire多久以前?他們的更新遭遇了長時間的間歇,但他們似乎在去年一直保持這種狀態。對於您的代理問題,我個人使用apache代理mod爲此,使用以下配置:http://pastebin.com/zEJ1ZZNq。當然,我還沒有做過任何嚴肅的負載測試。 – Naatan

+0

我們去年使用它,約。從八月到九月/十月。在我們切換到ejabberd之前,我們使用了afaik 3.7.0。你需要考慮的是,MUC(正如我們在設置中使用的那樣)需要比「標準」jabber服務更多的資源。也許它會適合你的情況。關於代理:有趣的設置,我需要測試(如果這是更好的)。我們已經(並且仍然有)我們的設置像[this](https://github.com/candy-chat/candy/wiki/HTTP-Proxy-Configuration)。 –