我在使用Python flask的服务器上运行REST服务。我有使用Java构建的REST客户端。我需要在单个Http REST请求中发送两个二进制消息。之所以是两个,是因为它们都属于不同的probbuff消息类型,但彼此之间是相互关联的,因此应该进入单个HTTP请求。我们如何在发送和接收端做到这一点。
答案 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的长度前缀)是有道理的-但严格来说说在当前情况下将是多余的。