首页 > 解决方案 > grpc请求和响应前面多出的5个字节是什么

问题描述

我将tensorflow-serving用于深度学习模型服务器,它是一个 grpc 服务。并且为了跟踪服务器的请求和响应,在服务器和客户端中间有一个代理。代理将记录整个 http 级别的请求和响应。

(request, response) 元组需要某种方式以供人类阅读。所以我需要将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 内容并翻译成一些人类可读的结构?

标签: tensorflowgrpctensorflow-serving

解决方案


gRPC 有一个 5 字节的标头。在https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md中搜索 Length-Prefixed-Message 。


推荐阅读