我总是构建自己的序列化器/反序列化器,以便能够将BeginReceive / EndReceive与套接字一起使用,以避免每个连接的套接字使用一个线程。这是一项非常耗时的任务。
我已经开始关注protobuf-net并希望将其与异步套接字一起使用,而无需自己编写序列化/反序列化。如果我不必每个套接字使用一个线程来封装阻塞操作,我宁愿这样做。
查看quickstart他们就是这样做的(每个客户一个线程)。没有别的办法吗?
我的问题不是关于protobuf-net,而是关于序列化和套接字。但是protobuf-net的例子非常受欢迎。
答案 0 :(得分:1)
这只是一个基本的例子。 protobuf-net是序列化层,而不是消息传递层。如果您有特定的方式来处理消息传递:去吧。您需要做的就是,在流处理期间,缓冲整个消息(可能是MemoryStream
),然后在数据可用时通过protobuf-net处理它。
不同之处在于,您可能希望直接处理有效负载长度,而不是直接使用*WithLengthPrefix
方法,以便您的代码知道在处理之前要缓冲多少数据。