gRPC FAQ
备注
- Support gRPC over HTTP/3 grpc#19126
- gRPC tunneling grpc#14101
proto3 optional
- optional 会返回 zero value
- 无法区分空值 和 optional
- 可以使用额外的 has 方法来判断是否存在
- proto v3.15 - 2020-04-23 增加 optional
- v3.12-v3.14 使用
--experimental_allow_proto3_optional
- 底层使用 oneof 实现
- v3.12-v3.14 使用
- 折中方案
- 使用 oneof
- 使用 google.protobuf.FieldMask
- 使用 Message 类型 - 还是会使用 pointer - 例如
google.protobuf.StringValue
替代 string
- 参考
- Missing value/null support for scalar value types in proto 3 protocolbuffers/protobuf#1606
- golang/protobuf#15
- protobuf/docs/field_presence.md
- edgedb-go#150
Trailer
gRPC 实现依赖 HTTP Trailer 能力,类似 longpulling。
- Why Does gRPC Insist on Trailers?
- Headers/Trailer
- fetch 不支持 trailer fetch#981
- 因此 web 不支持直接使用 grpc
- deno 不支持 grpc - 实现了 fetch
transport: Error while dialing reading server HTTP response: unexpected EOF
plaintext