Какие дополнительные 5 байтов перед запросом и ответом grp c - PullRequest
0 голосов
/ 26 февраля 2020

Я использую тензор потока-обслуживания для сервера модели глубокого обучения, это GRP c serivce. А для отслеживания запросов и ответов сервера в середине сервера и клиента находится прокси-сервер. Прокси-сервер будет записывать все запросы и ответы уровня http.

Кортежу (запрос, ответ) необходимо каким-то образом быть удобочитаемым для человека. Поэтому мне нужно перевести запрос и ответ grp c в формат json. Поскольку у меня есть файлы *.proto, это выглядит не так сложно. Но после некоторых тестов я обнаружил, что тело запроса и ответа grp c показывает 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 там. Итак ... что это значит? Все ли запросы и ответы grp c имеют эту дополнительную информацию? Или есть какой-то лучший способ разобрать содержимое grp c и перевести его в какую-то удобочитаемую структуру?

1 Ответ

1 голос
/ 29 февраля 2020

gRP C имеет 5-байтовый заголовок. Поиск сообщения с префиксом длины в https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md.

...