c# – 如何使用TcpClient处理Nagle的算法?

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

我对此感到疑惑,因为我看到很多代码示例客户端首先发送数据长度,然后发送数据本身以分离调用.这个问题不是以某种方式影响他们吗?

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

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

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

点赞