【问题标题】:gRPC message formatgRPC 消息格式
【发布时间】:2021-05-10 07:08:11
【问题描述】:

我想知道如何正确构造 GRPC 请求和响应。我在“编解码器”部分只找到了两个资源:

我相信我理解这两个文件。我了解 HTTP/2 框架是如何工作的(我在 Rust 中实现了自己的 HTTP/2 服务器和客户端,所以我很了解它)但是发送的消息总是以某种方式无效。

让我们以这个简单的消息(proto3)为例:

message Test1 {
  int32 a = 1;
}

我现在只处理响应部分。值 150 的电汇格式(如 google 示例中所指定)应为 Hex[08, 96, 01] ([00001000, 10010110, 00000001])。我将它打包到一个 DATA 帧中,并将其作为响应发送回 GRPC 客户端。响应如下所示:

...
[  0.010] recv SETTINGS frame <length=0, flags=0x00, stream_id=0>
          (niv=0)
00000000  00 00 00 04 01 00 00 00  00                       |.........|
00000009
[  0.010] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>
          ; ACK
          (niv=0)
[  0.010] send SETTINGS frame <length=0, flags=0x01, stream_id=0>
          ; ACK
          (niv=0)
00000000  00 00 0e 01 04 00 00 00  0d 88 5f 8b 1d 75 d0 62  |.........._..u.b|
00000010  0d 26 3d 4c 4d 65 64                              |.&=LMed|
00000017
[  0.012] recv (stream_id=13) :status: 200
[  0.012] recv (stream_id=13) content-type: application/grpc
[  0.012] recv HEADERS frame <length=14, flags=0x04, stream_id=13>
          ; END_HEADERS
          (padlen=0)
          ; First response header
00000000  00 00 03 00 00 00 00 00  0d 08 96 01              |............|
0000000c
[  0.016] recv DATA frame <length=3, flags=0x00, stream_id=13>
00000000  00 00 0f 01 05 00 00 00  0d 40 0b 67 72 70 63 2d  |.........@.grpc-|
00000010  73 74 61 74 75 73 81 07                           |status..|
00000018
[  0.016] recv (stream_id=13) grpc-status: 0
[  0.016] recv HEADERS frame <length=15, flags=0x05, stream_id=13>
          ; END_STREAM | END_HEADERS
          (padlen=0)
[  0.021] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
          (last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[])          

必须缺少标题,否则我缺少消息格式。有人可以使用curl 发布一个工作示例吗?谢谢!

【问题讨论】:

    标签: grpc codec


    【解决方案1】:

    我意识到 Length-Prefixed-Message 实际上是 Length-Prefixed, Message 所以每个 DATA 有效负载都必须加上前缀。

    【讨论】:

      猜你喜欢
      • 2018-07-24
      • 2019-09-25
      • 2019-02-21
      • 1970-01-01
      • 2018-05-29
      • 2023-03-07
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多