【发布时间】:2010-01-03 09:29:53
【问题描述】:
我正在使用 C 并且想知道就通过套接字连接进行的通信而言,XML 消息是否优于文本消息?
- 除了 XML 之外,还有其他更好的选择吗?
- 哪个是可用于在 C 中解析 XML 的最佳解析器(或解析选项)?
- 是否有任何 C 语言附带的标准库可以帮助解析 XML 消息?
【问题讨论】:
标签: c xml sockets connection parsing
我正在使用 C 并且想知道就通过套接字连接进行的通信而言,XML 消息是否优于文本消息?
【问题讨论】:
标签: c xml sockets connection parsing
您设计协议,因此您决定。您可以使用文本或二进制通信。无论您使用哪种格式,您都可以决定如何序列化/反序列化和解释数据。如果使用 XML,则可以利用 XMLRPC 或 SOAP。您也可以使用 JSONRPC。上次在我的项目中,我以一种非常简单但有效的方式使用二进制文件:首先识别要调用的方法/函数。接下来的 2 个字节用于通知数据的长度(最多 64K - 1 个字节),其余的是数据。注意 Big/Small Endianess。
这是非常主观的。您可以使用验证或非验证解析器。 TinyXML 是轻量级的。您可以查看 MiniXML 和 Expat。 libxml2 更胖。
到目前为止,XML 解析不在 C 或 C++ 的标准库中。您可以使用上述库。
祝你好运!
编辑:
顺便说一句,如果你想使用二进制格式交换数据,只需使用以下 3 个:
http://tpl.sourceforge.net/ - C 序列化库。
http://www.s11n.net/c11n/ - 一个强大而复杂的 C 序列化库。
Siseria - http://sourceforge.net/projects/siseria/ ,纯 C 语言。我为嵌入式系统项目编写。它运行没有任何依赖,而且速度非常快!与其他2相比,我的非常简单,根本不使用堆和动态内存。一切都在堆栈上!
【讨论】:
有许多可能的解决方案。我认为,在选择 XML 之前,我会考虑其他一些选项。 XML 有相当多的开销;除非你要压缩你的流,否则它可能会有点贵。 XML 对人类来说也不容易编辑,当然比二进制格式更难。
您可能想查看JSON,它是一种非常流行的格式,并且比 XML 简单得多。有很多可用的实现。
【讨论】:
我强烈推荐Protobuf,Google 的数据交换格式。我们使用它在两个进程之间进行通信,效果很好。它内置了对 C++、Python 和 Java 的支持,并为其他一些第三方库提供了支持(Jon Skeet 维护 C# 端口)。
【讨论】:
主要问题是您的性能要求是什么。
如果您打算每秒发送一条消息,请随意。如果您在一端有人机界面,请使用 XML 或任何其他文本格式。
如果您设计机器对机器的接口,您宁愿考虑二进制数据。在这种情况下,请记住将所有内容转换为网络标准字节顺序。
【讨论】: