我有两个独立的应用程序 - 一个是客户端(在C#中),一个是服务器(在C ++中)。他们需要以“结构”的形式交换数据,每分钟大约1 MB的数据从服务器发送到客户端。
最好使用 - XML还是我自己的二进制格式?
使用XML:
二进制:
任何指针?我根本不应该考虑二进制吗?对于采取何种方法有点困惑。
答案 0 :(得分:7)
如果您有合理的网络连接,每分钟1MB的数据非常小。
二进制和XML之间还有其他选择 - 其他人类可读的文本序列化格式,例如JSON。
说到二进制文件,你不会 有版本问题 - 像Protocol Buffers这样的技术(我有偏见:我为Google工作而我{{3}明确设计时考虑了向后和向前兼容性。还有其他二进制格式需要考虑,例如ported PB to C#。
如果你担心性能,你应该真正衡量它。我非常确定我的手机可以足够快地解析1MB的XML,因为在这种情况下它不会成为问题...基本上可以解决你最关心的问题:< / p>
这都是一种平衡行为 - 但你必须决定给予每个因素多少重量。
答案 1 :(得分:2)
如果两端都有.NET应用程序,请使用 Windows Communication Foundation 。这将允许您将决策推迟到部署时间,因为它支持二进制和XML序列化。
答案 2 :(得分:2)
正如你所说,XML是一个(小)慢,但更灵活,更可靠。我会使用XML,直到出现性能问题。
您还应该看一下ProtoBuff作为替代方案。
而且,在您更新之后,任何跨语言,跨平台和跨版本的要求都会远离二进制格式。
答案 3 :(得分:1)
XML的一个优点是互操作性。您是否有其他客户也可以访问您的服务器?
在使用自己的二进制格式或在XML上执行regex之前......您是否考虑过.NET中的序列化命名空间?有二进制格式化程序,SOAP格式化程序,还有XmlSerialization。
答案 4 :(得分:1)
XML的另一个优点是你可以通过添加一个元素来扩展你发送的数据,你不必改变接收者的代码来处理额外的数据,直到你准备好。
即使是最小化(快速)的XML压缩也可以大大减少线缆负载。
答案 5 :(得分:0)
文字/ XML 强>
<强>二进制强>
两种表单都是可扩展的,只要在数据报的开头插入一个类型和版本字段,就可以升级到更新的版本。
答案 6 :(得分:0)
您还可以使用Google Protocol Buffers,这是结构化数据的紧凑二进制表示。
答案 7 :(得分:0)
你没有说他们是否在同一台机器上。我不认为。
在那种情况下,二元有另一个缺点。你不能简单地将结构转储到线上,你可能会有字节序和大小问题。
XML非常冗长,YAML或JSON要小得多
答案 8 :(得分:0)
不要忘记大多数人认为XML是XML序列化为文本。它可以序列化为二进制。这就是netTcpBinding
和其他此类绑定在WCF中的作用。 XML信息集以二进制形式输出,而不是文本输出。它仍然是XML,只是二进制。