java中的特使gRPC HTTP/1.1网桥
我正试图用Java实现一个特使gRPC桥的例子 在来自特使的示例的源代码中,有一段代码从gRPC请求构建gRPC帧,然后将其作为http请求中的数据发送给特使代理java中的特使gRPC HTTP/1.1网桥,java,grpc,envoyproxy,python-envoy,Java,Grpc,Envoyproxy,Python Envoy,我正试图用Java实现一个特使gRPC桥的例子 在来自特使的示例的源代码中,有一段代码从gRPC请求构建gRPC帧,然后将其作为http请求中的数据发送给特使代理 r = kv.GetRequest(key=key) # Build the gRPC frame data = r.SerializeToString() data = pack('!cI', b'\0', len(data)) + data resp = requests.post(HOST + "/kv.KV/Get",
r = kv.GetRequest(key=key)
# Build the gRPC frame
data = r.SerializeToString()
data = pack('!cI', b'\0', len(data)) + data
resp = requests.post(HOST + "/kv.KV/Get", data=data, headers=HEADERS)
return kv.GetResponse().FromString(resp.content[5:])
但是我不知道如何用Java做同样的事情(构建grpc框架)
请帮助我知道我如何才能做到这一点
你们可以在这里找到完整的示例代码
谢谢我实现了以下功能 正文应为序列化grpc正文,即:
- 0的1字节(未压缩)
- 网络顺序4字节的原始消息长度
- 序列化的原始消息
我只是想让它工作,所以如果你们发现我的代码中有什么不好的地方,请告诉我:)你们可以使用Java的
ByteBuffer
来复制python的pack函数。
python调用pack(“!cI',b'\0',len(data))
指定使用BIG_ENDIAN字节顺序(ByteBuffer默认值)并写入字符/字节,后跟uint。因此,在java中,这将转化为:
public byte[] serializeGrpcRequest(Message message) {
byte[] messageBytes = message.toByteArray();
return ByteBuffer.allocate(messageBytes.length + 5)
.put((byte) 0)
.putInt(messageBytes.length)
.put(messageBytes)
.array();
}
public byte[] serializeGrpcRequest(Message message) {
byte[] messageBytes = message.toByteArray();
return ByteBuffer.allocate(messageBytes.length + 5)
.put((byte) 0)
.putInt(messageBytes.length)
.put(messageBytes)
.array();
}