c# - 将流与套接字一起使用的异步方法

标签 c# .net sockets asynchronous protobuf-net

我一直构建自己的序列化器/反序列化器,以便能够将 BeginReceive/EndReceive 与套接字一起使用,以避免每个连接的套接字使用一个线程。这是一项相当耗时的任务。

我已经开始研究 protobuf-net,并希望将它与异步套接字一起使用,而不必自己编写序列化/反序列化。如果我不必为每个套接字使用一个线程来包装阻塞操作,我会更愿意。

查看 quickstart他们正是这样做的(每个客户一个线程)。没有别的办法吗?

我的问题并不是真正关于 protobuf-net,而是关于序列化和一般的套接字。但最受欢迎的是 protobuf-net 示例。

最佳答案

这只是一个基本的例子。 protobuf-net 是序列化层,而不是消息传递层。如果您有特定的方式来处理消息传递:那就去做吧。您需要做的就是,在流处理期间缓冲整个消息(可能缓冲到 MemoryStream 中),然后在数据可用时通过 protobuf-net 对其进行处理。

不同之处在于,您可能希望单独处理有效负载长度,而不是直接使用 *WithLengthPrefix 方法,以便您的代码知道在处理之前要缓冲多少数据。

关于c# - 将流与套接字一起使用的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212185/

相关文章:

c# - 异步客户端套接字C#。如何在不阻止程序运行的情况下循环等待来自服务器的信息?

c# - Format Line 实际上没有格式化。

.net - 使用 XML 序列化格式化元素/属性值

sockets - 有没有办法使用 TCP keepalive 作为事件?

javascript - 在React JS中收到来自Web套接字的通知后,如何重新呈现表组件?

c# - Console.KeyAvailable - 如何重置此 boolean 值?

c# - 对具有复杂类型的多个属性进行 GroupBy

c# - 如何为 SqlCommand 修复此 CA2000?

c# - 在 .NET 中使用恢复/重试支持从 HTTP 下载大文件?

java - 当一条消息在没有读取 java 流的情况下到达服务器时会发生什么?