【问题标题】:Protocol Definition Language协议定义语言
【发布时间】:2011-01-07 23:28:36
【问题描述】:

您推荐什么协议定义? 我评估了 Google 的协议缓冲区,但它不允许我控制正在构建的数据包中字段的位置。我认为 Thrift 也是如此。我的要求是:

  1. 指定数据包中字段的位置
  2. 允许位域
  3. 条件:标志(位字段)= true 表示数据可以出现在数据包中的稍后位置
  4. 能够通过引用另一个数据包定义来定义数据包结构

谢谢。

(SourceForge 上用于定义 MPEG-4 的“Flavor”可能是候选者,但我正在寻找似乎拥有更多社区并且最好在 .NET 环境中工作的东西。)

【问题讨论】:

    标签: protocols


    【解决方案1】:

    看看 ASN.1 http://es.wikipedia.org/wiki/ASN.1

    FooProtocol 定义 ::= BEGIN

    FooQuestion ::= SEQUENCE {
        trackingNumber INTEGER,
        question       IA5String
    }
    
    FooAnswer ::= SEQUENCE {
        questionNumber INTEGER,
        answer         BOOLEAN
    }
    

    结束

    它似乎满足了你的主要要求:

    - Bit detail
    - ordered content
    - type references
    - not sure, about conditions
    

    被广泛使用,可以在java和python上找到一些实现

    【讨论】:

    • 明确一点,ASN.1 没有定义协议,只是数据的布局。如果你真的想指定协议,你需要指出可能的有效消息交换的顺序。如果协议“简单”,您可以执行此 FSA;如果没有,请考虑使用有色 Petri 网。
    【解决方案2】:

    我很想知道您提出要求的原因。为什么需要控制字段的位置?为什么位域很重要?条件?

    听起来您有一个(或多或少)固定的有线格式,您需要为其编写解析器,在这种情况下,没有任何现有的流行协议/序列化格式(Protobufs、Thrift、JSON、Yaml 等) .) 会为你工作。

    一种有点非正统的做法是使用ErlangHaskell,两者都对parsing binary protocols有很好的支持。

    【讨论】:

    • 我需要控制字段的位置,因为我们使用的协议定义需要这个。位域很重要,同样因为协议定义了这一点。条件是必要的,因为字段集可以要求创建另一个字段。我会检查你关于 Erlang 和 Haskell 的线索。
    【解决方案3】:

    C# 本身呢?

    例如

    class MySimplePDLData {
      // format: name (or blank if padding), bit length, value (or blank if data),
      // name of presence flag field (or blank if no presence flag), C# type
      // one packet type per string, fields separated by pipes (|)
      string[] pdl = {
    
    // MY-SIMPLE-PDL-START
    
      ",8,0xf8,|version,8,,Int32|type,8,,Int32|id1,64,,Int64",
      ...
    
    // MY-SIMPLE-PDL-END
    
      };
    }
    

    如果数据已经在内存中,则不需要对文件格式进行 IO。从这里您可以动态解释包或生成用于包识别/打包/解包所需的 C# 源代码,同样使用 C# 本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多