OpenFire,HTTP-BIND和性能

时间:2011-11-21 16:38:06

标签: performance chat xmpp openfire

我正在考虑启动一个openfire服务器并设置一个strophe.js客户端来连接它。我担心的是,使用http-bind在性能方面可能代价高,而不是直接进行XMPP连接。

有谁能告诉我我的担忧是否相关?如果是这样,到什么程度?

另一种方法是使用Flash代理与OpenFire进行所有通信。

谢谢

4 个答案:

答案 0 :(得分:3)

BOSH比普通的XMPP更冗长,特别是在闲置时。空闲BOSH连接可能是每分钟大约2个HTTP请求,而正常连接可以闲置几小时甚至几天而不发送单个数据包(理论上,在实践中,您将有ping和keepalive来对抗NAT和破坏防火墙)

但是,唯一真正知道的方法是基准。根据您的使用情况以及您的客户(将要)做的事情,差异可能会忽略不计。

答案 1 :(得分:1)

基础:

Socket - zero overhead.

HTTP - requests even on IDLE session.

我怀疑你一次会有1M用户,但是如果你的目标是它,那么像http这样的无连接协议会好得多,因为我不确定任何操作系统是否可以支持那种连接套接字体积。

此外,您可以将OpenFires绑定在一起,形成一个服务器场,并且您可以在那里获得良好的可扩展性。

答案 2 :(得分:1)

我们在同一个MUC频道中使用了大约400个并发用户的Openfire和BOSH。 我们注意到的是Openfire泄漏了内存。我们使用了大约1.5-2 GB的内存,并且内存异常不断。 此外,OpenOS的BOSH实施非常糟糕。然后我们切换到punjab,这更好但无法解决开火问题。

我们现在正在使用ejabberd内置的http-bind实现,它可以很好地扩展。运行ejabberd的服务器上的负载几乎为0。

目前我们面临的问题是,我们用于处理聊天负载的5个网络服务器有时会在大约200个连接的用户上超载。 我现在正在尝试使用websockets,但似乎它还没有用。 也许不是通过Apache重写规则重定向http-bind而是直接在loadbalancer / proxy上重定向可以解决问题,但我找不到如何执行此操作的方法。

希望这有帮助。

答案 3 :(得分:0)

我最终使用了node.js和http://code.google.com/p/node-xmpp-bosh,因为我遇到了通过BOSH直接连接到Openfire的一些困难。

我有一个运行的生产站点,node.js配置为代理所有BOSH请求,它就像一个魅力(大约50个并发用户)。到目前为止唯一的缺点:在Openfire管理控制台中,您将看不到所连接客户端的实际IP地址,只有本地服务器地址将显示为Openfire获取来自node.js服务器的连接。