我一直构建自己的序列化器/反序列化器,以便能够将 BeginReceive/EndReceive 与套接字一起使用,以避免每个连接的套接字使用一个线程。这是一项相当耗时的任务。
我已经开始研究 protobuf-net,并希望将它与异步套接字一起使用,而不必自己编写序列化/反序列化。如果我不必为每个套接字使用一个线程来包装阻塞操作,我会更愿意。
查看 quickstart他们正是这样做的(每个客户一个线程)。没有别的办法吗?
我的问题并不是真正关于 protobuf-net,而是关于序列化和一般的套接字。但最受欢迎的是 protobuf-net 示例。
最佳答案
这只是一个基本的例子。 protobuf-net 是序列化层,而不是消息传递层。如果您有特定的方式来处理消息传递:那就去做吧。您需要做的就是,在流处理期间缓冲整个消息(可能缓冲到 MemoryStream
中),然后在数据可用时通过 protobuf-net 对其进行处理。
不同之处在于,您可能希望单独处理有效负载长度,而不是直接使用 *WithLengthPrefix
方法,以便您的代码知道在处理之前要缓冲多少数据。
关于c# - 将流与套接字一起使用的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212185/