代码之家  ›  专栏  ›  技术社区  ›  MrTelly

窄带可扩展消息格式

  •  3
  • MrTelly  · 技术社区  · 15 年前

    我正在整理一个对投标的技术响应,其中一个要求是通过窄带网络(10字节/秒左右)使用可扩展格式传递消息。为了让服务器上的生活更轻松,服务器将接收来自1000台设备的信息,我想使用XML。为了帮助解决带宽问题,我可以使用压缩的XML,但是数据来自于可能没有OMPH进行动态压缩的嵌入式设备。任何人都有更好的想法,理想情况是一个小的可扩展格式,一旦通过窄带接收到消息,就可以将其转换为XML。

    5 回复  |  直到 13 年前
        1
  •  4
  •   Kornel    15 年前

    Google Protocol Buffers

    协议缓冲区是一种以有效但可扩展的格式对结构化数据进行编码的方法。Google几乎所有的内部RPC协议和文件格式都使用协议缓冲区。

        2
  •  0
  •   Daniel Roseman    15 年前

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

        3
  •  0
  •   Conor OG    15 年前

    一些更多的信息将是有用的。如前所述,答案可以是ASCII码。你在考虑传送数字、浮点数、度数和名字吗?也许是更深奥的东西,比如ASN.1。或者你可以完全疯掉,就像其他建议一样。

        4
  •  0
  •   Kannan Goundan    14 年前

    如其他人所说,谷歌协议缓冲区或ApacheThrift是非常流行的二进制序列化工具。也就是说,它们确实有一些开销,因为它们标记每个字段(以在更改模式时获得有限形式的向后/向前兼容性)。

    Apache Avro 不做标记,因此可以为您节省一点空间。

        5
  •  0
  •   pawstrong    13 年前

    一般来说,使用XML不会使服务器的使用变得更简单。如果您使用XML的任何“特性”(名称空间、实体、转义、国际化等),XML解析代码就很复杂,而且解析XML通常比解析其他格式(如JSON)慢。您可以在一页代码中编写一个简单的JSON编码器/解码器,而XML甚至YAML都需要更复杂的操作。Avro、Thrift和Google协议缓冲区是不错的选择,尽管您将增加您的依赖足迹。

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