gpt4 book ai didi

c# - 如何使用 C# 使用 Protobuf 进行非阻塞套接字读取?

转载 作者:太空狗 更新时间:2023-10-29 23:07:52 24 4
gpt4 key购买 nike

假设我想从网络套接字进行非阻塞读取。我可以异步等待套接字读取 x 个字节,一切正常。

但是我如何通过 protobuf 将它与反序列化结合起来呢?

从流中读取对象一定是阻塞的?也就是说,如果流包含的数据对于解析器而言太少,则必须在幕后进行一些阻塞,以便读取器可以获取所需的所有字节。

我想我可以使用 lengthprefix 定界符并读取第一个字节,然后计算出在解析之前我必须获取最少的字节数,这是正确的方法吗?例如如果我的缓冲区是 500 字节,则等待这 500 字节,并解析长度前缀,如果长度超过 500,则再次等待,直到读取所有字节。

结合非阻塞 IO 和 protobuf 解析的惯用方法是什么?

(我现在正在使用 Jon Skeet 的实现 http://code.google.com/p/protobuf-csharp-port/ )

最佳答案

作为一般规则,序列化器通常不包含 DeserializeAsync 方法,因为这真的真的很难做到(至少,高效)。如果数据大小适中,那么我会建议使用异步代码缓冲所需数量的数据 - 然后在所有所需数据可用时反序列化。如果数据非常大并且您不想在内存中缓冲所有内容,请考虑在工作线程上使用常规同步反序列化。

(请注意,这是特定于实现的注释,但如果您使用的序列化器确实支持异步反序列化:那么当然可以使用它)

关于c# - 如何使用 C# 使用 Protobuf 进行非阻塞套接字读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21232689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com