c# - 如何使用 TcpClient 应对 Nagle 算法?

标签 c# tcpclient

我正在阅读 this thread并在解决方案中注意到,如果您发送的数据长度与实际数据分开,Nagle 的算法可能会播放和取消同步发送的数据。

我想知道这一点,因为我看到很多代码示例,客户端首先发送数据的长度,然后发送数据本身作为单独的调用。这个问题是否以某种方式影响了他们?

我是否应该将数据的长度和数据本身连接到一个字节数组中并一次性发送?如果是这样,是否有更好的方法来连接两个字节数组,而无需手动将两个(循环)中的所有数据复制到新的数组中?对于必须如此频繁发生的事情(每次用户或服务器在彼此之间发送数据时),似乎效率很低。

最佳答案

如果您创建了一个设置了NoDelay 选项的Socket,那么您将不会受到Nagle 算法的影响;传递给 Send 的数据将立即发送。

鉴于此,在单个 Send 调用中传递单个字节数组比单独调用更有效;每次调用 Send 都会产生数据包 header 的开销。

关于c# - 如何使用 TcpClient 应对 Nagle 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7465623/

相关文章:

c# - 您可以通过 TcpClient 发送大于 SendBufferSize 的文件吗?

c# - 关闭 TcpClient 和 NetworkStream 的问题

javascript - 相当于 : echo 'message' | nc -v <server> <port> 的 Node.js

go - Golang RPC调用解决意外的EOF

C# LINQ GroupJoin 跳过项目

c# - 通过引用传递值到 List.Add()

c# - 如何从 Internet 获取 DateTime(外部资源 - 不是来自服务器)

c# - 在日期时间选择器 C# 中停用特定日期

c# - 我需要有关为 C# 显示多个文本框的帮助吗?

c - TCP 客户端套接字,不会阻塞 select()