![](/img/trans.png)
[英]How could I send XML data to a remote ColdFusion server from a .NET client?
[英]Should I use XML or Binary to send data from server to client?
我有两个独立的应用程序 - 一个是客户端(在C#中),一个是服务器(在C ++中)。 他们需要以“结构”的形式交换数据,并且每分钟大约1 MB的数据从服务器发送到客户端。
什么更好用 - XML或我自己的二进制格式?
使用XML:
二进制:
有什么指针吗? 我根本不应该考虑二进制吗? 对于采取何种方法有点困惑。
如果你有一个合理的网络连接,每分钟1MB的数据是非常小的。
二进制和XML之间还有其他选择 - 其他人类可读的文本序列化格式,例如JSON。
当涉及到二进制,你不必有版本问题-技术,如Protocol Buffers的 (我有偏见:我为谷歌工作,我已经移植到PB C# )明确设计时考虑了向前和向后兼容性。 还有其他二进制格式需要考虑,例如Thrift 。
如果你担心性能,你应该真的测量它。 我很确定我的手机可以足够快地解析1MB的XML,因为在这种情况下它不会成为问题...基本上可以解决你最关心的问题:
这都是一种平衡行为 - 但你必须决定给予每个因素多少重量。
如果两端都有.NET应用程序,请使用Windows Communication Foundation 。 这将允许您将决策推迟到部署时间,因为它支持二进制和XML序列化。
如你所述,XML是一个(小)慢,但更灵活和可靠。 我会使用XML,直到出现性能问题。
您还应该看看ProtoBuff作为替代方案。
并且,在您更新之后,任何跨语言,跨平台和跨版本的要求都强烈地指出二进制格式。
XML的一个优点是互操作性。 您是否有其他客户端也可以访问您的服务器?
在使用自己的二进制格式或在XML上执行regex之前......您是否考虑过.NET中的序列化命名空间? 有二进制格式化程序,SOAP格式化程序,还有XmlSerialization。
XML的另一个优点是,您可以通过添加元素来扩展您发送的数据,在准备好之前,您不必更改接收器的代码以应对额外的数据。
即使是最小化(快速)的XML压缩也可以显着减少线缆负载。
文/ XML
二进制
两种形式都是可扩展的,只要在数据报的开头插入类型和版本字段,就可以升级到更新的版本。
您还可以使用Google Protocol Buffers ,它是结构化数据的紧凑二进制表示。
你没有说他们是否在同一台机器上。 我假设没有。
在那种情况下,二元有另一个缺点。 你不能简单地将结构转储到线上,你可能会遇到字节序和大小问题。
XML非常冗长,YAML或JSON要小得多
不要忘记,大多数人认为XML是XML序列化为文本。 它可以序列化为二进制。 这就是netTcpBinding
和其他此类绑定在WCF中的作用。 XML信息集以二进制形式输出,而不是文本输出。 它仍然是XML,只是二进制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.