【问题标题】:Java multicast listening and IGMPJava 多播侦听和 IGMP
【发布时间】:2016-10-10 19:34:27
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java multithreading network-programming multicast igmp


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2011-04-29
      • 2011-06-17
      • 1970-01-01
      • 2012-12-21
      相关资源
      最近更新 更多