在一个http rest请求中发送两个二进制消息

时间:2018-12-17 01:56:46

标签: rest http serialization flask protocol-buffers

我在使用Python flask的服务器上运行REST服务。我有使用Java构建的REST客户端。我需要在单个Http REST请求中发送两个二进制消息。之所以是两个,是因为它们都属于不同的probbuff消息类型,但彼此之间是相互关联的,因此应该进入单个HTTP请求。我们如何在发送和接收端做到这一点。

1 个答案:

答案 0 :(得分:0)

这里最简单的选择可能是简单地声明包装消息类型:

message FooRequest {
    // remove "required" if using proto3 syntax
    required Request1MessageType part1 = 1;
    required Request2MessageType part2 = 2;
}

并发送由两个内部消息组成的单个FooRequest 。但是,这并非总是可能的,在这种情况下,您将必须在二进制有效负载内部实现自己的成帧机制。一个简单但实​​用的选择可能是测量第一条消息的大小(以字节为单位),即len,然后发送:

[len, 4 bytes little endian][message 1, len bytes][message 2]

并在另一端再次对其进行解码-即获取前4个字节,并使用该字节计算两个内部消息的范围。考虑到将来需要更多消息,可能每条消息中包含一个长度前缀(即也包括消息2的长度前缀)是有道理的-但严格来说说在当前情况下将是多余的。