我正在考虑启动一个openfire服务器并设置一个strophe.js客户端来连接它。我担心的是,使用http-bind在性能方面可能代价高,而不是直接进行XMPP连接。
有谁能告诉我我的担忧是否相关?如果是这样,到什么程度?
另一种方法是使用Flash代理与OpenFire进行所有通信。
谢谢
答案 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服务器的连接。