我正在将tensorflow-serving用于深度学习模型服务器,这是grpc服务。为了跟踪服务器的请求和响应,在服务器和客户端中间有一个代理。代理将记录整个http级请求和响应。
(请求,响应)元组需要某种方式可以被人类阅读。所以我需要将grpc请求和响应转换为json格式。由于我有*.proto
文件,因此看起来并不难。但是经过一些测试,我发现grpc请求和响应主体在整个主体前面显示了5个(不同的)额外字节数据。
// bytes in the grpc response:
\x00\x00\x00\x00c\nA\n\x07Softmax\x126\x08\x01\x12\x08\x12\x02\x08\x01\x12\x02\x08\n*(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x1e\n\x07default\x12\x02\x08\x01\x1a\x0fserving_default
// bytes in the raw .pb format:
\nA\n\x07Softmax\x126\x08\x01\x12\x08\x12\x02\x08\x01\x12\x02\x08\n*(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x1e\n\x07default\x12\x02\x08\x01\x1a\x0fserving_default
您可以看到那里还有五个字节\x00\x00\x00\x00c
。那么...这是什么意思?所有的grpc请求和响应是否都具有此额外功能?还是有更好的方法来解析grpc内容并将其转换为人类可读的结构?
gRPC具有5个字节的标头。在https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md中搜索长度前缀消息。