在 Java 中,如果我将 DatagramPackets 留在 DatagramSocket 会怎样?
In Java, what happens if I leave DatagramPackets at the DatagramSocket?
我正在使用 DatagramSocket
构建网络应用程序。
我有一个 "network" 线程,它的唯一工作是从 DatagramSocket
中提取 DatagramPacket
个对象并将数据放在 BlockingQueue
中。它会尽可能快地执行此操作。然后队列被其他线程使用。
假设我的 "network" 线程 运行 很慢并且数据包正在套接字上堆积。
- 套接字是否有可能 "overflow" 并且数据包丢失?
- 从套接字中获取数据包并存储是否有任何优势
他们早早地在 POJO 队列中?
- 我的 "network" 线程和队列设置是否真的有必要 - 我应该直接使用
DatagramSocket
吗?
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?
是的。
我正在使用 DatagramSocket
构建网络应用程序。
我有一个 "network" 线程,它的唯一工作是从 DatagramSocket
中提取 DatagramPacket
个对象并将数据放在 BlockingQueue
中。它会尽可能快地执行此操作。然后队列被其他线程使用。
假设我的 "network" 线程 运行 很慢并且数据包正在套接字上堆积。
- 套接字是否有可能 "overflow" 并且数据包丢失?
- 从套接字中获取数据包并存储是否有任何优势 他们早早地在 POJO 队列中?
- 我的 "network" 线程和队列设置是否真的有必要 - 我应该直接使用
DatagramSocket
吗?
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?
是的。