0

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

我认为我路径中的路由器正在放弃我的订阅。我正在竭尽全力编写代码来稳定这个过程。

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

顺便说一句:计算机是 HP DL380 Gen-9,具有 10G 光纤连接到 6509 交换机。

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

请不要要求任何代码示例。

4

1 回答 1

2

joinGroup()操作已在网络上发出 IGMP 请求。不必自己发送它们,而且在纯 Java 中也不可能。

您可以节省套接字和线程。在大多数操作系统上,一个套接字最多可以加入大约 20 个组,如果您使用 NIO 和选择器,则不需要多个线程。

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

我不知道这是什么意思。如果你指的是DatagramSocket,你不能用它来接收多播,所以这句话是没有意义的。如果你不是,这句话是没有意义的。

于 2016-10-10T20:16:51.520 回答