我想知道我是否可以使用XML作为应用程序级协议。 XML将仅仅位于TCP协议之上,2个应用程序只需要知道如何解析XML。
但问题是,XML不够紧凑。在使用TCP发送之前,我应该使用某种算法压缩XML有效负载吗?如果我压缩它,那么两端都会涉及压缩/解压缩成本。真是一个两难的境地。有什么好建议吗?或者我采取了错误的方法?
非常感谢。
答案 0 :(得分:1)
如果您需要一种指定消息外观的简单方法,我会说您可以使用直接XML来处理消息,而不必担心压缩或任何事情(XML并不是非常快速)。如果您需要更快更紧凑的内容,请查看Google Protocol Buffers或Thrift(我个人更喜欢协议缓冲区,但每个人都不喜欢我......)。
如果您需要使您的界面易于与许多不同的客户端(例如Web服务)进行互操作,那么使用XML可以是一种好方法。另一方面,如果您始终负责通信的两端,您可以随时快速地开始工作,然后再进行优化。
答案 1 :(得分:1)
定义“足够紧凑”,你测量它对你的应用来说太慢了吗?避免使用premature optimisation。
与任何协议一样,在各个方向都存在权衡。 XML为您提供了一种众所周知的跨平台格式,其中包含几乎任何语言的库,能够表示各种结构化数据。 XMPP选择此选项,并对带宽受限的设置使用可选压缩。在XMPP世界中使用替代表示的实验很少值得付出努力。
从XML开始,但仍然提供许多优势的是JSON。虽然它没有命名空间,但它非常简单,而且库几乎和XML一样常见。尽管如此,JSON仍然是基于文本的,在某些情况下可能仍然很冗长。
最后明智的选择是二进制协议。这样做的优点在于您可以根据您的应用专门定制和优化它。缺点是您必须自己编写解析和序列化,尽管有一些工具可以自动执行此操作,例如Google的Protocol Buffers项目。
最终所有这些都适用于不同的地方,选择取决于应用程序开发人员,他们应该为给定的项目使用它。