Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的特使gRPC HTTP/1.1网桥_Java_Grpc_Envoyproxy_Python Envoy - Fatal编程技术网

java中的特使gRPC HTTP/1.1网桥

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",

我正试图用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", 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();
}