我有一台 Windows 2008 R2 服务器,一个应用程序在等待另一台服务器发生某个事件时不断轮询该服务器(使用 Flash 套接字)。我们说的是毫秒级的时间。当接收服务器滞后时,它的 TCP 接收窗口会充满轮询请求,我的服务器会停止发送任何内容,但它会继续生成请求。我想它们存储在某个网络发送缓冲区中。当我从接收服务器收到 ACK 时,所有等待的轮询请求都会在一个巨大的数据包中同时发送,这会使接收器过载,然后一切都会重复。我想随着时间的推移均匀地分散请求。
我几乎无法影响生成请求的软件。如何减少发送缓冲区,以确保当其他服务器滞后时不会向其发送大量数据?我对任何黑客或全局设置都满意。在我的 NIC 配置窗口中,我可以更改“传输缓冲区”设置,这样能解决问题吗?
答案1
这实际上行不通 - 数据不会堆积在发送方,而是堆积在接收方,由 TCP 套接字接收并等待应用程序接收,因此降低发送窗口不会有帮助。(摆弄该缓冲区可能会改变堆积,但这些调整是系统范围的,您需要手动将窗口剪切到 4 个位置 - 这不是一种令人愉快的方法。)
您无法控制发送应用程序,那么接收应用程序呢?如果在过去 X 秒内已经收到轮询请求,是否可以让它丢弃所有轮询请求?