gpt4 book ai didi

Java组播监听和IGMP

转载 作者:行者123 更新时间:2023-12-02 03:18:25 27 4
gpt4 key购买 nike

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

我认为我路径中的路由器正在放弃我的订阅。我正束手无策地编写代码来稳定这个过程。

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

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

任何关于在哪里查看的指示都会很有帮助。

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

最佳答案

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

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

I have used datagram but found NIO MulticastChannel much better).

我不知道这意味着什么。如果您指的是DatagramSocket,则不能使用它来接收多播,因此这句话毫无意义。如果不是,这句话就没有意义。

关于Java组播监听和IGMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39965474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com