我的应用程序使用 UDP 的多播功能。
简而言之,我正在使用 java 并希望使用单个多播地址和端口传输所有数据。尽管多播监听器将在逻辑上分为子组,这些子组可以在运行时更改,并且可能不希望处理来自其组之外的数据。
为了实现这一点,我编写了代码,以便所有正在运行的应用程序实例都将加入相同的多播组和端口,但会仔细观察数据包的发送者以确定它是否属于其子组。
警告我的应用程序的最小数据包大小为 30000-60000 字节!!!!!!
将使用 MulticastSocket.receive(DatagramPacket) 读取每个数据包,并确定其所需的数据包是否会导致过多的开销(甚至缓冲区溢出)。
它会产生大量流量,导致网络拥塞,因为每个数据包都会发送给每个人吗?
最佳答案
并不是每个数据包都会发送给每个人,因为多播(例如 PIM)会构建一个多播树,以最佳方式放置接收者和发送者。因此,网络会在需要时复制数据包。组播数据包在最后一跳进行广播(技术上更准确,在第 2 层泛洪)。 IGMP 在最后一跳协助组播,并确保如果最后一跳没有接收者加入,则不会进行此类泛洪。
“并且可能不希望处理来自其组之外的数据。”接收调用将返回下一个接收到的数据报,因此几乎无法避免处理不适合子组分类的数据包。您的应用程序不能使用不同的多个组吗?
关于java - 组播数据开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18415966/