2009-07-09 53 views
3

我正在对投标进行技术响应,其中一个要求是在窄带宽网络(每秒10字节左右)使用可扩展格式传递消息。为了让服务器上的生活变得简单,我将使用Xml从1000个设备接收信息。为了帮助解决带宽问题,我可以使用压缩的Xml,但是数据来自嵌入式设备,可能没有omph来进行压缩。任何人都有更好的想法,一个理想将是一个小的可扩展格式,一旦收到窄带信息,可能会被误解为Xml。窄带可扩展消息格式

回答

4

Google Protocol Buffers

协议缓冲器处于高效而可扩展的格式编码的结构化数据的方法。谷歌几乎所有的内部RPC协议和文件格式都使用Protocol Buffers。

+0

还有一个.net版本 - http://code.google.com/p/protobuf-net/正是我需要的 - 干杯 – MrTelly 2009-07-13 04:48:25

0

YAML是非常简洁的格式,非常适合在设备之间传递序列化信息。大多数编程语言都有可用的库,所以服务器可能直接理解它,并且不需要转换为XML。

0

一些更多的信息是有用的。如上所述,答案可能是ASCII。你是否在考虑传送号码,花车,学位,名字?也许像ASN.1这样更深奥的东西。或者你可以完全发疯,就像其他建议一样。

0

与其他人一样,谷歌协议缓冲区或Apache Thrift是非常受欢迎的二进制序列化工具。也就是说,他们确实有一些开销,因为他们标记每个字段(以便在更改模式时实现有限的向后/向前兼容形式)。

Apache Avro不会做这样的标记,因此会为您节省更多的空间。

0

通常,使用XML不会让服务器的生活更轻松。如果使用XML的任何“功能”(名称空间,实体,转义,国际化等),则XML解析代码是复杂的,解析XML通常比解析其他格式(如JSON)要慢。您可以在一页代码中编写简单的JSON编码器/解码器,而XML甚至YAML将需要更多的复杂性。 Avro和Thrift以及Google协议缓冲区都是不错的选择,尽管您会增加对依赖关系的占用空间。

如果你真的限制在10字节/秒,那么你可能会想要一个没有大量引用或语法的编码;一个手工制作的带有长度前缀的协议,或者类似protobuf的二进制编码,可能就是你想要的。