首页 > 解决方案 > C#/.net:通过 TCP 连接传输许多小块数据

问题描述

我有一个应用程序需要通过 TCP 连接 (WLAN) 传输许多小 (1-3Byte) 消息。我知道一次发送 100kB 比发送非常小的块(几乎按字节)要快得多。尽管如此,我需要传输的信息只有 1-3 字节大小。在发送之前收集数据会增加吞吐量,但重要的是要尽可能早/快地传输小块数据。所以在发送之前收集数据是个问题。现在我问,最好的方法是什么,一方面不要单独发送每条消息,另一方面不要将它们的传输延迟超过必要的时间。现在我正在考虑创建一个小缓冲区。添加第一条消息时,我启动一个超时时间为 1 毫秒的计时器。在那一毫秒之后,数据将被传输。与队列中有多少字节无关。但我不知道这是否是一个好的解决方案。

.NET 的 TCPClient/Server 类本身是否有解决此类问题的方法。我的意思是,他们应该知道当前传输何时结束。与此同时,他们可以累积所有发送请求并将它们发送出去,就像在一个事务中一样。

标签: c#.netsocketstcp

解决方案


默认情况下,TCP 堆栈会在内部缓冲数据,以减少发送时的开销。有关详细信息,请参阅Nagle 算法。只需确保您启用了此算法,即将 Nodelay设置为 false。


推荐阅读