Java多播侦听和IGMP

时间:2016-10-10 19:34:27

标签: java multithreading network-programming multicast igmp

我有一个让我发疯的问题!无论是设计方面还是技术方面。 我需要收听大量的多播地址。我监控/收集的每个项目分为3组。我已经走上了让一个进程旋转100个线程的道路。每个线程使用2个端口和3个地址/组。 (其中2个组在同一个端口上)我正在为每个端口使用MulticastChannel,并使用SELECT监视数据。 (我使用过数据报,但发现NIO MulticastChannel要好得多)。 无论如何,我看到的问题是我可以订阅大约一千个这样的线程,并且数据很好地哼唱。问题是,过了一段时间我会让其中一些人停止接收数据。我已经向系统(CentOS)确认我仍然订阅了这些地址,但数据才停止。我的线程中有监视器,它通过RTP头监视数据丢失和无序。当我检测到线程已停止获取数据时,我执行DROP / JOIN,然后数据恢复。

我在想我的路径中的路由器正在放弃我的订阅。 我在最后编写代码来稳定这个过程。

有没有人发过IGMP加入网络以保持数据流动?这是可能的,甚至是合理的。

BTW:计算机是HP DL380 Gen-9,与6509交换机的10G光纤连接。

任何关于在哪里寻找的指示都会有所帮助。

请不要询问任何代码示例。

1 个答案:

答案 0 :(得分:2)

joinGroup()操作已经在网络上发出IGMP请求。没有必要自己发送它们,而且无论如何都不可能用纯Java。

您可以节省套接字和线程。在大多数操作系统上,套接字最多可以连接20个组,如果您使用的是NIO和选择器,则无论如何都不需要多个线程。

  

我使用了数据报,但发现NIO MulticastChannel要好得多。)

我不知道这意味着什么。如果您指的是DatagramSocket,则不能将其用于接收多播,因此句子毫无意义。如果你不是,这句话毫无意义。