提供 gRPC 服务
提供 gRPC 服务
学习如何提供 gRPC 服务。
brpc 中访问和提供 http/h2 服务的基础内容列在 http_client 和 http_service 中。
以下各节的名称即协议名,可直接设置到 ChannelOptions.protocol 中。冒号之后的内容是该协议的参数,用于动态选择派生行为,但基础协议仍然是 http/1.x 或 http/2。因此,这些协议在服务端只显示为 http 或 h2/h2c。
http:json, h2:json
非空的 pb 请求会被序列化为 json,并设置到 http/h2 请求的 body 中。此时 Controller.request_attachment() 必须为空,否则 RPC 会失败。
非空的 pb 响应由解析 http/h2 响应 body 得到的 json 转换而来。
http/1.x 默认就采用这种方式,因此 “http” 与 “http:json” 是等价的。
http:proto, h2:proto
非空的 pb 请求会被序列化(采用 pb 的 wire 格式),并设置到 http/h2 请求的 body 中。此时 Controller.request_attachment() 必须为空,否则 RPC 会失败。
非空的 pb 响应从 http/h2 响应的 body 中解析得到(采用 pb 的 wire 格式)。
http/2 默认就采用这种方式,因此 “h2” 与 “h2:proto” 是等价的。
h2:grpc
gRPC 的默认协议。其详细格式在 gRPC over HTTP2 中描述。
使用 brpc 的客户端只需将 ChannelOptions.protocol 改为 “h2:grpc”,即可与 gRPC 通信。
使用 brpc 的服务端无需修改代码,即可自动被 gRPC 客户端访问。
gRPC 默认将消息序列化为 pb wire 格式,因此 “h2:grpc” 与 “h2:grpc+proto” 是等价的。
TODO: gRPC 的其他配置
h2:grpc+json
与 h2:grpc 相比,该协议将消息序列化为 json 而非 pb,gRPC 可能无法直接支持这种方式。例如,grpc-go 用户可以参考 此处 来注册相应的 codec 并开启支持。
最后修改于 2022 年 2 月 26 日:[brpc website 1.0 fix links jump problem in overview page (14eec1ac1)]](https://github.com/apache/brpc-website/commit/14eec1ac1805c1dde9f10d0353984bde2127294c)
评论
登录后参与评论
KnowForge