XML over Sockets是好还是坏?

时间:2012-05-21 07:30:59

标签: xml sockets architecture tcp

我一直在研究一种通过套接字传输xml一段时间的系统。我从来没有真正理解选择xml而不是自定义协议的真正优势。

但是我确实看到很多开发人员(特别是最初的Web开发人员)设置了这种实现(xml over socket)。

我明白这更像是“人类可读”(这就是我一直听到的)。

但是,

  • Xml携带了大量的字符,导致巨大的消息,实际上内容非常简单。

  • 邮件大小各不相同,因此您需要保证以特定字符或字符串模式终止邮件。

  • 解析xml

  • 时会有更多开销

由于所有这些原因,当我可以使用固定大小的消息使用自定义协议设置我的系统时,我仍然怀疑在新系统上考虑XML over Sockets。避免传输大量消息并且性能在客户端大小上解析xml。

这样想我错了吗?系统架构方面的“最佳”是什么?

此致

7 个答案:

答案 0 :(得分:6)

传统上在通过网络传输数据时使用XML的主要原因是因为它是可扩展的。它可以扩展您的应用程序并将其转换为其他应用程序构建在您的应用程序上的潜在平台,或者使其他应用程序更容易与您集成,而无需解决已经解决的问题。

毕竟,这就是开发商付出的代价。解决新问题。不创造它们。

Ryan Tomayko在How I Explained REST to My Wife的博客文章中谈到了这一点,当时他强调使用标准意味着全世界的个别系统可以联网,形成庞大,有凝聚力的个人系统。

当您使用自己的自定义协议时,基本上将应用程序限制为仅在其自己的小世界中进行通信。然后,当需要将它与另一个系统粘合在一起时,两端都需要进行更多的集成工作。

据说,JSON开始作为XML的替代品获得了很大的吸引力。它更轻量级,可被多个平台理解,并且实际上是Web语言的原生JavaScript。

任何选择都很棒,因为你正在使用所有经验丰富的开发人员都能轻松理解的东西,并且每个系统都能够消费。

答案 1 :(得分:4)

这里没有“最佳”决定,这完全取决于您的要求。如果您需要非常高的性能,那么您应该使用一些带有小消息的自定义二进制协议。然而,这也带来了缺点。 XML的主要优点是它是一种非常标准化的格式,易于从各种平台和应用程序中读取。例如,使用cusom协议,您需要实现消息的序列化和反序列化。此外,XML比自定义格式更具扩展性。

总而言之,这实际上取决于系统的要求。

答案 2 :(得分:4)

使用自定义协议不是一个好主意,因为这意味着在开发和测试中需要付出很多努力。此外,它将是一个特定的实现,除非您付出很多努力以通用的方式设计它。使用XML,传输本身不会与您的应用程序捆绑在一起。由于XML具有灵活性和可扩展性,因此您可以在不影响传输的情况下更改结构和内容。

尽管如此,使用XML有其自身的一些缺点,就像你指出的那样。确实,它涉及不必要的重量转移。但是,像JSON这样的替代方案可以解决这些问题。

答案 3 :(得分:3)

设计决策都是关于权衡。您已经列举了XML为您提供的内容 - 可读性和自我描述。它还带有描述语言(XSD),非常便携等等。

但是这些优点伴随着你提到的缺点。让我们逐一解决它们:

<强>冗长

是的,XML很冗长,既是自我描述性的,也是基于文本的。如果性能是一个问题,这只是一个真正的问题。是吗?那么积极的权衡呢?

请注意,这里合理的替代方案是JSON,它同样可读但效率更高。

改变尺寸

是的,但这取决于连接层。如果您没有持久连接(例如,HTTP),或者您正在使用提供自己的“框架”(例如AMQP或JMS)的协议,那么这不是问题 - 传输层负责处理它。如果您打算重新发明这个轮子,那么不同的有效载荷会使协议变得更难。但协议(特别是所有边缘情况)都很难。

解析开销

这与详细程度直接相关。

答案 4 :(得分:3)

协议在套接字上运行的事实与此问题没有直接关系。

许多人选择将XML用于其协议的表示层的原因主要在于它避免了指定和实现您自己的表示层的工作量和成本。是的,如果您希望在消息大小,变更可能性,实施成本和其他因素之间进行不同的权衡,那么您可能能够设计出比XML更优化这些要求的协议。或者,鉴于许多非常优秀的人参与了XML设计,你可能会设计更糟糕的东西(通常是因为你的长期需求不是你想象的那样 - 例如你最终可能会设计一些东西卓越的表现,但改变的可能性很小)。但无论你做得好还是做错了你的设计,它都会比使用已经存在的XML或JSON之类的东西花费更多。

答案 5 :(得分:2)

重新发明轮子永远不是一个好主意。我会坚持使用标准HTTP协议并使用可互操作的数据交换格式,例如XML或JSON。如果您使用行业标准协议而不是重新发明自定义协议,您将找到更多工具和支持。就最佳实践而言。当然,如果你有一些非常具体的要求,可能有充分的理由去实现更加个性化的东西。

答案 6 :(得分:2)

正如您所解释的那样,XML有各自的优缺点。当您想要替代方案来减少网络流量时,您可以考虑压缩数据的http://code.google.com/p/protobuf/并拥有自己的编组技术。其他在Web技术中众所周知的是JSON。

在系统架构方面最好的是:我们需要定义它是Web还是企业系统集成等。这完全取决于您正在设计的系统。