2010-05-12 68 views
0

我有一個即將由apache提供服務的聊天應用程序(xmpp/muc)(稍後我們可能會更改爲nginx,但現在不太容易)。如果用戶在2個房間中,他將有2到4個到服務器的活動連接(長輪詢連接),所以如果我們有每個房間200個用戶,並且有5個房間,應該設置ServerLimit,MaxClients應該設置什麼至?例如,這些都是默認值:關於apache調整聊天應用程序的建議

將ServerLimit 256米

的MaxClients 256

MaxRequestsPerChild 4000個

感謝,

+0

您可以查看mpm_event_module。它在apache 2.2中是實驗性的,但它肯定可以幫助你。我不確定它是否支持ssl。 – Boris 2010-05-13 03:59:36

回答

-1

我猜這一個叉預阿帕奇...

如果你有1000個併發聊天連接,那麼你至少需要1000個web服務器(大概你會提供stati c的內容,並且你說每個狀態導致2個連接 - 所以你可以加倍1000) - 256的ServerLimit/MaxClients不會削減它,你可能需要大約2200來支持這個(但沒有硬指標很難給出確切的數字)。

這是一個可笑的大數額。爲了支持這一點,我會在網絡服務器啓動之前尋找3個盒子,每個盒子大約有2Gb的可用內存。

MaxRequestsPerChild實際上並不相關,除了您希望進行一些流程更替的事實,尤其是在您使用長輪詢時。

這是COMET不是一個好主意的原因之一。使用AJAX輪詢會更有效率。假設這是不是你可以改變,你可能想看看使用線程Apache網絡服務器這是稍微更高效存儲,

C.

+0

對不起,只是因爲Apache無法高效地處理Comet,並不是一個壞主意。它也不會使AJAX輪詢更令人滿意,因爲它會產生更多的數據庫負載。 1000個客戶端長時間2分鐘處理比每秒處理1000個請求(如果您需要實時)要高效得多。同樣,如果你計算他們每5秒纔會來,你仍然有200 RPS的任何東西!這給你可怕的數據庫加載字面上沒有什麼! – 2012-05-25 21:40:50

+0

僅僅因爲它不起作用不會使它成爲一個壞主意?真? Wwill會產生更多的數據庫負載「不 - 什麼樣的人試圖通過數據庫進行中繼聊天? – symcbean 2012-05-26 22:19:00

0

每個用戶應該只需要在XMPP的單一連接服務器如果你使用類似BOSH的東西來建立Web-> XMPP連接。每個MUC房間活動將以用戶的JID作爲目標發送到XMPP服務器,並將導致服務器將其發送到適當的BOSH連接。同樣的存在。

您需要負載平衡Apache設置的信息與負載平衡任何長輪詢連接相同 - XMPP不會添加任何異域的混合。 XMPP BOSH連接是一個到您的Web服務器的長輪詢連接,然後發送到XMPP服務器的持久連接 - 導致每個用戶連接打開2個套接字。