c# - C#/.net:通过 TCP 连接传输许多小块数据
问题描述
我有一个应用程序需要通过 TCP 连接 (WLAN) 传输许多小 (1-3Byte) 消息。我知道一次发送 100kB 比发送非常小的块(几乎按字节)要快得多。尽管如此,我需要传输的信息只有 1-3 字节大小。在发送之前收集数据会增加吞吐量,但重要的是要尽可能早/快地传输小块数据。所以在发送之前收集数据是个问题。现在我问,最好的方法是什么,一方面不要单独发送每条消息,另一方面不要将它们的传输延迟超过必要的时间。现在我正在考虑创建一个小缓冲区。添加第一条消息时,我启动一个超时时间为 1 毫秒的计时器。在那一毫秒之后,数据将被传输。与队列中有多少字节无关。但我不知道这是否是一个好的解决方案。
.NET 的 TCPClient/Server 类本身是否有解决此类问题的方法。我的意思是,他们应该知道当前传输何时结束。与此同时,他们可以累积所有发送请求并将它们发送出去,就像在一个事务中一样。
解决方案
默认情况下,TCP 堆栈会在内部缓冲数据,以减少发送时的开销。有关详细信息,请参阅Nagle 算法。只需确保您启用了此算法,即将 Nodelay设置为 false。
推荐阅读
- javascript - 如何JS将值传递给对象方法并复制以返回
- python - python 食谱中的掷骰子
- apache - 启用 https 到 Xampp localhost
- android - 使用 Ionic 框架在 HTML5 音频播放器上播放来自 Android 设备的本地音频文件
- c# - 在 DataGridView 中显示性别 0,1
- html - 使 CSS 网格单元格图像项使用所有可用空间
- node.js - 我的聊天机器人应用程序未在 SSL 认证服务器上运行
- java - CoreNLP 的共指解析
- java - Android Studio 无法正确显示 xml 文件
- javascript - 如何为锚标签禁用 routerLink