WCF/SOAP中的Nagle算法是否有用?

atl*_*ste 6 .net wcf network-programming nagle

我在Azure上看到了很多关于在WCF中禁用Nagle算法的帖子.我一直想知道这是否仅适用于Azure,或者这应该是更通用的最佳实践.

如各种来源所述,Nagle算法基本上将小TCP请求批处理为单个更大的请求.批量发生在每个连接的基础上.

我在专业环境中看到的大多数WCF传输都是小块数据,由单个线程发送,大多数是双向的.我知道这对于Nagle算法来说并不是理想的情况.

那么......我的结论是否正确,在使用WCF或SOAP时,无论上下文如何,最好始终禁用它?

Dar*_*rer 3

据我了解,Nagle 的算法仅在数据以小块形式传输且速率低于网络吞吐量时才有效。例如,如果它是视频源或来自某些硬件传感器的恒定输出(其中实时并不重要,但历史很重要)。想象一下极端情况 - 所有这些数据都是在没有使用 Nagle 算法的情况下逐字节发送的,本质上将流量乘以 41。

相反,当数据以一大块(SOAP 请求)写入,然后以一大块(SOAP 响应)接收时,它当然没有用处,甚至有害(由于延迟)。因此建议关闭它。

因此,我们可以得出结论,除非实时处理很重要(控制台终端),否则Nagle 算法应该保留用于流应用程序(文件、视频、持续数据馈送)。它基本上是应用程序的“良好行为准则”,不要用无用的流量阻塞通道(这可能是网络负载较重的大型数据中心的问题)。如果通信以请求-响应模式完成(即:所有数据一次写入缓冲区 - 因此 Nagle 算法无效),则可以默认将其关闭。