【发布时间】:2020-01-07 15:12:52
【问题描述】:
TPL Dataflow 可以用于处理 TCP 字节流吗?我对这个主题相当陌生,正在寻找处理 TCP 字节流的最佳方法。
更具体地说:我在 TCP/IP 之上使用协议 (HSMS),它指定具有 4 个长度字节和消息结构的消息。我正在编写一个库,并且有一个接收解码消息的消费者。 我需要在我的图书馆做的是:
- 从 Socket 读取字节并缓冲它们
- 一旦我有了长度字节和消息本身,我就需要对其进行转换/解码。
- 然后我会将消息传递给库的使用者
通常我有一个生产者和一个消费者。并且 IO 操作是异步的。
我开始手动完成所有操作,但意识到这非常复杂和乏味,尤其是线程安全。所以我偶然发现了 TPL 数据流,我很好奇这个案例是否值得考虑。我主要担心的是我只有一个生产者(Socket)和一个消费者,我想知道这是否矫枉过正。
我还找到了System.IO.Pipelines,但对于我的用例也没有太多信息。
【问题讨论】:
-
您真的有任何并行的改进吗?我只会单独使用网络流。下面的链接我刚刚使用了 TCP,并且有一个方法 ReadWrite 来防止同时读取和写入。请参阅:stackoverflow.com/questions/44471975/…
-
你不能让多个线程同时写入同一个套接字,否则你最终会得到重叠的消息,除非你绝对确定这些消息将适合单个缓冲区问题是这不能保证。我无法对带有任务的管道进行足够的评价 - 如果您需要示例,请告诉我。w
标签: c# sockets tcp task-parallel-library tpl-dataflow