English 中文(简体)
袜子上的XML是好的还是坏的?
原标题:Is XML over Sockets good or bad pratice? [closed]
Closed. This question is opinion-based. It is not currently accepting answers.

想要改进这个问题吗? 更新问题,以便用

Closed 7 years ago.

我一直在研究一个系统来传输 xml over sockets 。 我从来没有真正了解选择 xml over sockets 而不是自定义协议的真正好处。

但我确实看到许多开发商(特别是最初的网络开发商) 建立这种执行(xml over sockets) 。

我理解这更"人类可读"(我一直听到的就是这个)。

但是,

  • Xml的字符数量惊人, 导致巨大的信息, 而事实上内容非常小和简单。

  • 信件大小不同, 因此您需要保证您用特定的字符或字符串模式终止信件 。

  • 当解析 xml 时, 管理费会更多

出于所有这些原因,我仍然怀疑在新系统中用Sockets考虑 XML 和 Sockets 来设置新系统, 此时我可以使用固定大小信件的自定义协议来设置我的系统。 避免发送巨大的信息, 并且性能会点击对客户端大小的 Xml 分析 。

我这样想是错误的吗?

观 观 观

最佳回答

设计决定都是关于权衡。 您已经列举了 XML 给您带来什么 - 可读性和自我描述。 它还包含描述语言( XSD), 极可移动等等 。

但有你提到的劣势,这些优劣,将一一地解决。

<强度 > 危险

是的, XML 是动词, 既自定义又基于文本。 这只有在表现引起关注时才真正是一个问题。 是否? 正面的取舍呢?

请注意,这里合理的替代办法是JSON,它同样可以读,但效率要高得多。

< 强度 > 变化大小

是的, 但这取决于连接层。 如果您没有持续连接( 例如, HTTP), 或者您正在使用一个协议来提供它自己的框架( 如 AMQP 或 JMS ), 那么这不是个问题 - 运输层会处理它。 如果您计划重塑这个车轮, 是的, 不同的有效载荷会使协议更难执行。 但是协议( 特别是所有边框) 已经够难了 。

< 坚固 > 铺设

这与动脉直接相关。

问题回答

XML传统上用于在网络上传输数据的主要原因是因为它可以扩展。它扩大了您的应用程序,并将其转化为其他应用程序的潜在平台,以便在您的基础上发展,或者它使其他应用程序更容易与您融合,而不必解决一个已经解决的问题。

毕竟,这就是开发商的薪酬。解决新的问题,而不是创造问题。

Ryan Tomayko在他的博客文章“http://tomayko.com/writings/rest-to-my-wife”中谈到此事,

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

因此,JSON开始获得许多牵引力,以取代XML。 它更轻,被多个平台所理解,事实上是网络语言JavaScript的母语。

任何一种选择都是伟大的,因为你正在使用一些所有有经验的开发商都很容易理解的东西, 每一个系统都能够消耗。

这里没有“ 最佳” 的决定, 它只是关于您的要求。 如果您需要非常高的性能, 那么您应该使用一些带有小信件的自定义二进制协议。 但是, 这也会带来一些缺点 。 XML 的主要优点是它是一个非常固定的格式, 很容易从广泛的平台和应用中读取。 例如, 使用 cusoom 协议, 您需要执行信件的序列化和淡化 。 此外, XML 比自定义格式要宽得多 。

综上所述,这真的取决于你系统的要求。

使用自定义协议将不是一个好主意, 因为这将意味着开发和测试方面的大量努力, 而这是不必要的。 另外, 这将是一个具体的执行, 除非您做出大量努力, 以通用的方式设计它。 如果使用 XML, 运输本身将不会与您的应用程序挂钩。 由于 XML 是灵活和可扩展的, 它允许您在不影响您的运输的情况下改变结构和内容 。

但是,使用XML有其自身的劣势,正如你所指出的。 确实,它涉及不必要的重量转移。 但是,像JSON这样的替代方法对于克服这些问题来说是一个好主意。

协议横跨索凯茨对该问题没有直接影响。

如此多的人选择使用 XML 作为其协议的演示层的原因, 主要是因为它避免了指定和实施您自己的演示层的努力和成本。 是的, 如果您想要在信息大小、变化潜力、执行成本及其他因素之间做出不同的权衡, 那么您很可能能够设计出一个比 XML 更好的优化满足这些要求的协议。 或者,鉴于许多优秀的人参与了 XML 设计, 您可能设计出更糟糕的东西( 通常因为您的长期要求并不是你想象的那样 — — 比如说, 你可能最终设计出一个业绩优秀但变化潜力非常差的东西。 但是, 无论你做的是好的工作,还是你设计的差的工作, 都会比使用诸如 XML 或JSON这样的已经存在的东西花费更多。

重新发明轮轮从来就不是一个好主意。 我将坚持标准的 HTTP 协议, 并使用可互操作的数据交换格式, 如 XML 或 JSON 。 如果您使用行业标准协议而不是重塑自定义协议, 将会找到更多的工具和支持。 这在最佳做法方面是肯定的。 当然, 如果您有某些非常具体的要求, 执行一些更定制化的东西或许有很好的理由 。

正如你所解释的那样, XML 本身也有其优点和缺点。 当你想要其他办法来减少网络交通量时, 您可以考虑 < a href=" http://code.google.com/ p/protobuf/" rel="nofollow" > http://code.google.com/p/protobuf/ , 它压缩了数据, 并拥有它自己的协调技术。 在网络技术中广为人知的另一种技术是JSON。

从系统结构的角度看,什么是最好的:我们需要确定它是网络还是企业系统整合等等。这都取决于你所设计的系统。





相关问题
how to represent it in dtd?

I have two element action and guid. guid is a required field when action is add. but when action is del it will not appear in file. How to represent this in dtd ?

.Net application configuration add xml-data

I need to add xml-content to my application configuration file. Is there a way to add it directly to the appSettings section or do I need to implement a configSection? Is it possible to add the xml ...

XStream serializing collections

I have a class structure that I would like to serialize with Xstream. The root class contains a collection of other objects (of varying types). I would like to only serialize part of the objects that ...

MS Word splits words in its XML format

I have a Word 2003 document saved as a XML in WordProcessingML format. It contains few placeholders which will be dynamically replaced by an appropriate content. But, the problem is that Word ...

Merging an XML file with a list of changes

I have two XML files that are generated by another application I have no control over. The first is a settings file, and the second is a list of changes that should be applied to the first. Main ...

How do I check if a node has no siblings?

I have a org.w3c.dom.Node object. I would like to see if it has any other siblings. Here s what I have tried: Node sibling = node.getNextSibling(); if(sibling == null) return true; else ...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

热门标签