2010-05-12 65 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个套接字。