协议缓冲区是否能很好地处理流中数据的结尾

Does protocol buffer handle nicely end of data on stream

我在 c#、.net core 2 和协议缓冲区方面完全是新手,但我必须在个人项目(server/client 架构)中使用这 3 种技术。我对多条消息中的 serialization/deserialization 有一些疑问。 我已经看到这个: https://developers.google.com/protocol-buffers/docs/techniques#streaming 所以我知道这需要一种特殊的技术。经过一点 google 会话后,我发现了一些关于 c++ 中的 put 和 pop 限制的信息,但我没有看到 c# 上的文档。

我还有一个问题,google protocol buffers 能很好地处理读取吗?我的套接字由 select 监控,所以当我想阅读我的消息时(使用 https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/message-parser#class_google_1_1_protobuf_1_1_message_parser_1a110e5d9bc61837e369e5deb093f59161) 我不确定 protobuf 将如何停止读取(我不想读取超出套接字上可用数据的范围,因为它会使我的服务器阻塞...) 它管理它吗?谢谢...

独立的 protobuf 不以任何方式定界——它们不对长度进行编码,也没有固定的开始和结束。

但是 API 为您提供了一些用于发送和存储多条消息的工具 - 具体来说,您可以使用 WriteDelimitedTo() to write multiple protobufs to some output, and then read them using parseDelimitedFrom()