Java组播监听和IGMP

标签 java multithreading network-programming multicast igmp

有一个问题让我抓狂!无论是设计方面还是技术方面。 我需要监听很多多播地址。我正在监视/收集的每个项目将它们分为 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/

相关文章:

c++ - 使用者线程中的函数无法访问内存位置

c++ - 在lambda中锁定std::shared_ptr的复制操作

c - 网络编程中如何完成tcp拆解的完整4步

java - 在 Scala 插件中控制错误的 IntelliJ 代码编辑器错误

java - 使用 Paho Java 库处理 MQTT 消息的最佳实践

java - 单向多对多只读关系

java - 如何通过 Instagram、Whatsapp 或任何社交应用程序共享您自己的应用程序中的图像文件?

c++ - 在没有 boost::thread 的情况下,thread_specific_pointer 在哪些平台上工作?

c - 套接字正忙导致 poll() 延迟

python - Netmiko send_config_set - 解析响应 - 检测错误?