【发布时间】:2013-12-14 23:59:16
【问题描述】:
我有 2 个 java 线程接收 UDP 多播。
每个线程将接收来自不同多播流的 UDP 数据包,例如大约 60 Mbps,然后处理共享 BlockingQueue 中的 UDP 数据包和队列。 UDP 数据包大约 1300 字节。
我想要队列中处理的 UDP 数据包的顺序,这与数据包到达机器 NIC 的方式相同,即使从不同线程(不同的多播流)接收数据包也是如此。
我无法在这些线程中实现这一点,这是我的问题。
是否可以使用 java,或者我应该使用 C 之类的其他语言?
编辑
基本上,线程将从不同的多播流接收多播,队列中的数据包顺序将取决于接收线程如何执行以从 NIC 获取数据包的顺序,但我希望顺序与数据包到达 NIC 的方式相同。
我尝试降低每个流的 UDP 接收缓冲区,数据包几乎按顺序进入队列,但数据包开始丢失。如果我增加接收缓冲区,队列中的顺序完全取决于接收线程的执行方式。
请帮助我。有可能吗?
【问题讨论】:
-
几乎可以肯定。你试过什么?您的解决方案在哪里失败?
-
我试过做 Thread.yield() 和 Thread.sleep(0),让每个 RX 线程轮流,但我没有得到正确的结果
-
基本上,线程将从不同的多播流接收多播,队列中的数据包顺序将取决于接收线程执行从网卡获取数据包的顺序,但我希望顺序与数据包到达的方式相同网卡。
-
@Keppil 你能指导我吗?
-
很抱歉,这仍然太模糊,我无法为您提供帮助。
标签: java multithreading sockets udp multicast