我正在研究如何启动一个openfire服务器,并设置一个strophe.js客户端来连接它。我担心的是,与直接在XMPP上建立连接相比,使用http-bind可能在性能方面代价高昂。
有没有人能告诉我,我的担忧是否相关?如果是这样,在多大程度上呢?
另一种方法是对与OpenFire的所有通信使用闪存代理。
谢谢
发布于 2011-12-09 04:00:38
BOSH比普通的XMPP更冗长,尤其是在空闲的时候。空闲的BOSH连接可能大约是每分钟2个HTTP请求,而正常的连接可以空闲几个小时甚至几天而不发送一个数据包(理论上,在实践中,您将使用ping和keepalives来对抗NAT和损坏的防火墙)。
但是,唯一真正了解的方法是benchmark。根据您的用例,以及您的客户端正在(将要)做什么,差异可能可以忽略不计。
发布于 2011-12-11 06:08:57
基础知识:
Socket - zero overhead.
HTTP - requests even on IDLE session.
我怀疑你是否会同时拥有100万用户,但如果你的目标是这样做,那么像http这样的无连接协议将会更好,因为我不确定任何操作系统都能支持这种连接套接字容量。
此外,您还可以将您的OpenFires捆绑在一起,形成一个场,在那里您将具有良好的可扩展性。
发布于 2011-12-20 18:47:46
我们使用Openfire和BOSH,在同一个MUC通道中有大约400个并发用户。我们注意到的是Openfire会泄漏内存。我们使用了大约1.5-2 GB的内存,并且得到了常量的内存不足异常。此外,Openfire的BOSH实现也相当糟糕。然后我们切换到punjab,它更好,但不能解决openfire问题。
我们现在将ejabberd与其内置的http-bind实现结合使用,它具有很好的伸缩性。运行ejabberd的服务器上的负载几乎为0。
目前,我们面临的问题是,我们用来处理聊天负载的5个we服务器有时会在大约200个连接的用户处超载。我现在正在尝试使用websockets,但它似乎还不起作用。也许不通过Apache重写规则重定向http-bind,而是直接在负载均衡器/代理上重定向可以解决这个问题,但我找不到一种方法来实现这一点。
希望这能有所帮助。
https://stackoverflow.com/questions/8215201
复制相似问题