在 Java 中,如果我将 DatagramPackets 留在 DatagramSocket 会怎样?

In Java, what happens if I leave DatagramPackets at the DatagramSocket?

我正在使用 DatagramSocket 构建网络应用程序。

我有一个 "network" 线程,它的唯一工作是从 DatagramSocket 中提取 DatagramPacket 个对象并将数据放在 BlockingQueue 中。它会尽可能快地执行此操作。然后队列被其他线程使用。

假设我的 "network" 线程 运行 很慢并且数据包正在套接字上堆积。

Is it possible for the socket to "overflow"

您的套接字接收缓冲区可能已满,以至于无法接受新的数据报。

and packets get lost?

总是 [UDP] 数据包可能会丢失,但这是另一个原因。

Is there any advantage to taking packets from the socket and storing them in a POJO queue early?

不是真的。您只是在转移问题,从需要潜在​​的无限网络和套接字接收缓冲区容量到需要潜在的无限输入队列容量。您的目标应该是尽可能快地处理传入的数据报,并尽您所能承担损失。

Is my "network" thread and queue setup really necessary - should I just work with DatagramSocket directly?

是的。