我正在寻找一种指定二进制数据的技术规范方法。我正在寻找XML模式描述(XSD)之类的东西。
目的是使用该格式生成可以正确解释二进制序列的程序;即编程语言绑定。这就像XSD的许多框架可以生成OO编程语言中的类,可以表示XML-Data、解析和序列化。尽管如此,方法论需要具有高度的人类可读性,以便领域专家可以指定和解释此文本规范。
到目前为止,我只找到了人类可读的语法。在许多标准中使用了ASCII-Art,例如在RFC或AMQP中,如下所示:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
TCP Header Format
然而,这几乎是机器可读的。
有时我会看到扩展的巴科斯诺尔形式的规范。然而,技术领域的人并不能真正理解这一点,我也不知道有什么标准建议使用这种方法来指定二进制数据。
有人能提出合适的方法/标准吗?
干杯,豪克
您的问题表达得很好,但前提是有一种格式最适合满足冲突约束。
相反,应分别为人机消费选择最佳格式,并在两者之间自动转换。根据您的需要,此映射可以是完全双向的,或者一种格式可以从另一种格式单独派生出来。
一旦您采用了自动转换模式,您将发现不再过度限制解决方案空间,并且您将能够为真正的两个独立目标集(人的需求和机器的需求)而不是一个组合目标集进行优化。
null
我们说,要实现 Memcached 的 GET, SET, 和 DELETE 操作。我们仅仅关注这些,但 memcached 协议有一个通用的结构,只有少数参数改变为了改变一个请求或响应的意义。这意味着您可以轻松地扩展实现添加其他命令。一般协议有 24 字节头用于请求和响应。这个头可以分解如下表14.1中。 Table 14.1 Sample Memcached header byte struc
如何定制协议 实际上制定自己的协议是比较简单的事情。简单的协议一般包含两部分: 区分数据边界的标识 数据格式定义 一个例子 协议定义 这里假设区分数据边界的标识为换行符”\n”(注意请求数据本身内部不能包含换行符),数据格式为Json,例如下面是一个符合这个规则的请求包。 {"type":"message","content":"hello"} 注意上面的请求数据末尾有一个换行字符(在PHP中
想象一下,我有一个简单的CQL表 在许多情况下,人们会希望利用Cassandra的无模式本质,只设置一些值,例如 当编写应用程序以写入Cassandra集群中的CQL表时,出于性能原因,需要立即使用准备好的语句来完成此操作。 这由不同的驾驶员以不同的方式处理。例如,Java驱动程序引入了(在CQL二进制协议修改的帮助下)使用命名绑定变量的机会。非常实用:CASSANDRA-6033 我想知道的是,
我正在构建一个软件来远程控制连接到另一台PC的无线电硬件。 我计划使用ZeroMQ进行传输,并使用类似于RPC的请求-回复,其上有表示操作的不同消息。 虽然我的大多数消息只是一些控制和状态信息,但应该可以选择设置要传输的数据blob或请求要接收的数据blob。这些数据blob通常在5-10MB的范围内,但也应该可以使用最大100MB的较大blob。 对于消息格式,我发现google协议缓冲区非常有
由于TCP是基于流的,客户端发送的请求数据是像水流一样流入到服务端,服务端探测到有数据到来后应该检查数据是否是完整的,因为可能只是一个请求的部分数据到达服务端,甚至可能是多个请求连在一起到达服务端。如何判断请求是否全部到达或者从多个连在一起的请求中分离请求,就需要规定一套通讯协议。 在WorkerMan中为什么要制定协议? 传统PHP开发都是基于Web的,基本上都是HTTP协议,HTTP协议的解析