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