Jabber和昂贵的数据(xml垃圾)

时间:2012-03-06 10:42:32

标签: compression xmpp

我正在一个拥有jabber通信平台的项目中工作。

问题是我需要客户(很多客户)彼此之间进行通信,不仅是为了信号化,而且是为了改变它们之间的数据。

想象一下,客户端A有3种服务可用。客户端B可以请求A开始向他发送来自每个服务的信息(如流服务),直到客户端B向A表示停止服务。

这些服务只能发送一个间隔为100毫秒的字符或1000个字符间隔100毫秒的字符,甚至可以在需要时发送一些数据。

当信息发送到B时,它必须知道什么服务对应,什么动作和值(示例),所以我使用json而不是jabber。

我的问题是我用jabber xmpp协议浪费了很多带宽只是为了发送一个像下面这样的信息的消息:

{“s”:“x”,“x”:5} //每100毫秒(5代表任意数字)

我真的不希望进行并行通信(比如直接套接字),因为jabber已经实现了所有这些并且它易于扩展,防火墙问题,有时我使用http通信(在这种情况下即时使用BOSH)。

我知道我可以做一些压缩,但是我想知道你是否推荐了一些其他的东西,这些东西在我的消息背后仍然没有这么多的xml,仍然使用jabber。

非常感谢你的帮助。

最诚挚的问候,

爱德华

2 个答案:

答案 0 :(得分:2)

不,Xml不是垃圾。它具有人性化,可扩展性和压缩性。

XMPP支持流压缩,根据我的所有测试,此流压缩(主要是zlib)工作得非常好。因此,如果您优化通过线路发送的字节数或低带宽对您很重要,那么当您使用套接字时,请使用流压缩。当您使用Bosh时,您必须使用支持HTTP压缩的服务器或在其间使用代理来启用压缩。但请记住,BOSH在所有HTTP标头上也有很多开销。

答案 1 :(得分:2)

听起来,除了重要的数据传输,XMPP很适合您的应用程序。

您可能知道,XMPP从未被设计或打算用作数据传输的大管道。大多数涉及重要数据传输的应用程序(例如文件传输和语音/视频)仅使用XMPP来协商单独的“带外”流。您说这可能会因为防火墙和Web客户端而导致问题。

如果您的应用程序主要是传输文本,那么您真的应该尝试压缩...如果这是您最受限制的资源,它可以显着节省带宽。缺点是需要更多的客户端和服务器内存(默认情况下大约300KB,但可以通过边际压缩损失来减少)。

或者,您可以查看使用In-Band Bytestreams对数据库64进行隧道传输。我没有您的样本数据,或者知道如何将它们包装起来进行运输,这可能会变得更糟或更好。我会说,如果你剥离了你的JSON并使其成为更有效的二进制格式,它会更好。 Base64数据压缩不会很好,比原始数据大约大33%。节省的是能够剥离JSON和任何其他无关的包装,同时将数据保留在XMPP流中。

最终扩展大多数应用程序都很难,无论您使用哪种技术。它主要需要洞察力 - 如果不先测试它就不应该改变任何东西,你应该事先测试一下,找出你应该改变的东西。你应该分析你的系统的主要瓶颈(它真的是客户端的带宽??)。在我的经验中,很少有XML本身成为直接的瓶颈。然而,最终所有这些都是您的应用程序所独有的,大规模提供通用建议并不容易。