提高 BOSH 吞吐量

Posted

技术标签:

【中文标题】提高 BOSH 吞吐量【英文标题】:Improving BOSH Throughput 【发布时间】:2010-07-26 14:34:41 【问题描述】:

我使用 Jabber 实现了一个网络聊天系统,其中 Tigase 服务器和基于 Ajax 的客户端使用 JsJac 通过 BOSH 进行通信,Apache mod_proxy 将 HTTP 流量转发到 Tigase。这工作得相当好,但我注意到与桌面 Jabber 客户端(如 Exodus)相比,性能存在一个重大差距,尤其是在加入具有长期消息历史的多用户聊天时。

具体来说,从监控 HTTP 流量来看,服务器似乎每个 HTTP 请求-响应周期只能发送一条 XMPP 消息。对于正常使用来说,这很好(我们得到大约 80-100 毫秒的往返时间,这还不错),但是在加载 MUC 历史记录时,它可能是一个真正的拖累。

所以我的问题是:Jabber 或 BOSH 是否提供任何可能适用于此用例的捆绑或流式消息机制?是否有任何客户端和服务器已经实现了这样的功能?还是我必须自己修改 Tigase 和 JsJac(这当然有可能,但并不理想)?

【问题讨论】:

你解决过这个问题吗?听起来是个很棒的项目... 不完全是,但这是我仍然感兴趣的话题。我将在下面查看 Alec 的答案,看看会发生什么。 【参考方案1】:

实际上,BOSH 服务器可以从 Jabber 服务器收集尽可能多的响应,并将它们作为单个响应发送给客户端。我是这样一个 BOSH 库的作者:http://code.google.com/p/node-xmpp-bosh/。

对于 BOSH,响应正文与请求正文无关。我的意思是响应可能而且大部分将是对不相关请求的响应(主要是稍后的请求)。

【讨论】:

这显然是一个 Tigase 问题(尽管我不再有可用的 Tigase 实例,所以我无法验证它)。我在其他配置中没有遇到这个问题。【参考方案2】:

我已经在服务器上使用 Java 并在客户端(浏览器)上使用 GWT 实现了一个 BOSH 通信解决方案。还进行了 C 客户端实现。目前,我正在使该解决方案可在线进行测试。请查看以下 Google 演示文稿,了解我的解决方案是否与您的业务相关:

https://docs.google.com/present/edit?id=0AUPL-u98h45WZGQzNWNjOGhfMGd6bWI1NmNk&hl=en&authkey=CPTzrWc

要查看演讲者备注,请务必点击页面右下角的“查看演讲者备注”按钮。

【讨论】:

以上是关于提高 BOSH 吞吐量的主要内容,如果未能解决你的问题,请参考以下文章

系统吞吐量QPS并发数响应时间,以及提高吞吐量的思路

springboot应用如何提高服务吞吐量

调整Apache Jmeter以提高请求吞吐量

提高 Node JS 服务器应用程序吞吐量的步骤

网卡可以绑定cpu提高吞吐量

你可能写了个假异步,并不能提高请求线程池的吞吐量