tensorflow - 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 内容并翻译成一些人类可读的结构?
解决方案
gRPC 有一个 5 字节的标头。在https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md中搜索 Length-Prefixed-Message 。
推荐阅读
- arrays - 使用带有数组的 gatsby-plugin-image 的 GatsbyImage 时出现问题
- mantis - 创建插件以在 Mantis Bt 的用户帐户页面中添加列
- java - 使用 MS SQL 数据库 IntegratedSecurity=true 的 Spring Boot Maven 项目配置
- dijkstra - 当我尝试在 Dijkstra 算法中添加父数组时如何解决这个错误的访问问题
- proxy - Istio 上的 Jgroups
- mysql - MySQL 8.0.23.0 更改类型和网络
- sql - 需要帮助求和/分组值
- svn - HPUX Subversion 客户端不再连接到远程存储库
- chef-infra - 试图配置 ruby 环境,但我发出命令 echo 'evaluation "$(chef shell-init bash)"' >> ~/.bash_profile 它什么也没做
- postgresql - Spring Data JPA with Postgres 动态修改列问题