我正在阅读this thread并在解决方案中注意到,如果您发送的数据长度与实际数据分开,Nagle的算法可能会播放并取消同步发送的数据。
我对此感到疑惑,因为我看到客户端的大量代码示例首先发送数据长度,然后发送数据本身以分离调用。这个问题不会以某种方式影响他们吗?
我应该将数据和数据本身的长度连接到单个字节数组并一次性发送吗?如果是这样,有没有更好的方法来连接两个字节数组而无需手动将所有数据从两个(循环)复制到新的?对于必须经常发生的事情(每次用户或服务器在彼此之间发送数据)而言似乎效率很低。
答案 0 :(得分:2)
如果您创建了Socket
并设置了NoDelay
选项,那么您将不会受到Nagle算法的影响;传递给Send
的数据将立即发送。
鉴于此,在单个Send
调用中传递单个字节数组会更有效,而不是单独的调用;每次调用Send
都会产生数据包标头的开销。