协议定义语言

Mr.*_* T. 7 protocols

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

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

谢谢.

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

Cla*_* Ku 5

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

FooProtocol DEFINITIONS :: = BEGIN

FooQuestion ::= SEQUENCE {
    trackingNumber INTEGER,
    question       IA5String
}

FooAnswer ::= SEQUENCE {
    questionNumber INTEGER,
    answer         BOOLEAN
}
Run Code Online (Sandbox Code Playgroud)

结束

它似乎涵盖了您的主要要求:

- Bit detail
- ordered content
- type references
- not sure, about conditions
Run Code Online (Sandbox Code Playgroud)

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

  • 需要明确的是,ASN.1 没有定义*协议*,只是定义了数据的布局。如果你真的想指定协议,你需要指出可能的有效消息交换的顺序。如果协议“简单”,您可以执行此 FSA;如果没有,请考虑使用彩色 Petri 网。 (2认同)

Jes*_*erE 3

我对您提出要求的原因感兴趣。为什么需要控制字段的位置?为什么位域很重要?条件句?

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

一种有点非正统的方法是使用ErlangHaskell,它们都对解析二进制协议有很好的支持。