【问题标题】:C#/.net: Transfering many small pieces of data via a TCP connectionC#/.net:通过 TCP 连接传输许多小块数据
【发布时间】:2020-06-13 00:06:06
【问题描述】:

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

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

【问题讨论】:

  • 这只是NoDelay = true,确定吗?

标签: c# .net sockets tcp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2017-04-27
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多