我们有一个应用程序,它使用 UDP 从服务器系统向运行在多台 Windows XP PC 上的客户端应用程序广播数据。这是在 LAN 上,通常是千兆位。这几年来一直运行良好。
我们现在需要在每台四核 PC 上运行两个(或更多)客户端应用程序,每个应用程序实例都接收广播数据。我用来实现这一点的方法是为每个客户端 PC 提供多个 IP 地址。然后,每个客户端应用程序使用相同的端口号但在不同的 IP 上连接到服务器。这在功能上有效,但由于某种原因性能非常差。我的数据传输率降低了大约 10 倍!
为了获得多个 IP 地址,我尝试了使用两个 NIC 适配器并在高级 TCP/IP 网络属性中将多个 IP 地址分配给单个 NIC。这两种方法似乎都给出了同样糟糕的性能。我还尝试使用几个不同制造商的 NIC,但这也无济于事。
我确实注意到的一件事是数据似乎更加分散。如果我向客户端发送 20kBytes 的数据,PC 上只有一个客户端,它几乎总是以一个块的形式接收所有数据。但是在两个客户端运行的情况下,数据似乎大多以帧大小(1500 字节)的块形式出现,因此我的代码必须迭代更多次。但我不认为这本身会造成如此戏剧性的性能冲击。
所以我想我的问题是有没有人知道为什么性能这么慢,是否可以采取任何措施来加快速度?
我知道我可以重新设计一些东西,以便服务器只向每台 PC 的一个客户端发送数据,然后该客户端可以将数据镜像到同一台 PC 上的其他客户端。但这是一项重大的重新设计和重新编码工作,所以我想把它作为最后的手段。