java - 组播数据开销?

标签 java sockets networking udp multicast

我的应用程序使用 UDP 的多播功能。

简而言之,我正在使用 java 并希望使用单个多播地址和端口传输所有数据。尽管多播监听器将在逻辑上分为子组,这些子组可以在运行时更改,并且可能不希望处理来自其组之外的数据。

为了实现这一点,我编写了代码,以便所有正在运行的应用程序实例都将加入相同的多播组和端口,但会仔细观察数据包的发送者以确定它是否属于其子组。

警告我的应用程序的最小数据包大小为 30000-60000 字节!!!!!!

将使用 MulticastSocket.receive(DatagramPacket) 读取每个数据包,并确定其所需的数据包是否会导致过多的开销(甚至缓冲区溢出)。

它会产生大量流量,导致网络拥塞,因为每个数据包都会发送给每个人吗?

最佳答案

并不是每个数据包都会发送给每个人,因为多播(例如 PIM)会构建一个多播树,以最佳方式放置接收者和发送者。因此,网络会在需要时复制数据包。组播数据包在最后一跳进行广播(技术上更准确,在第 2 层泛洪)。 IGMP 在最后一跳协助组播,并确保如果最后一跳没有接收者加入,则不会进行此类泛洪。

“并且可能不希望处理来自其组之外的数据。”接收调用将返回下一个接收到的数据报,因此几乎无法避免处理不适合子组分类的数据包。您的应用程序不能使用不同的多个组吗?

关于java - 组播数据开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18415966/

相关文章:

Java 连接到 SQL Server

java逆变疑问

java - 无法使用套接字发送大文件

Objective-C/ cocoa : How do I accept a bad server certificate?

java - 由于 ActionListener,JComboBox 未刷新/更新

java - 将 GroupLayout 更改为 GridBagLayout

sockets - Chrome 实验性套接字 API : What Does `chrome.experimental.socket.sendTo()` And `recvFrom()` Do?

python - 0x8915有什么用?

c++ - 如何获得连接路由中的跃点?

c - 在进程退出时释放绑定(bind)端口