在Java中,如果我将DatagramPackets留在DatagramSocket会发生什么?

时间:2015-10-12 08:59:01

标签: java multithreading sockets udp blockingqueue

我正在使用void listDevices(string*& list) 构建联网应用程序。

我有一个“网络”主题,其唯一的工作是从DatagramSocket提取DatagramPacket个对象,并将数据放在DatagramSocket上。它尽可能快地完成这项工作。然后该队列被其他线程使用。

假设我的“网络”线程运行缓慢且数据包正在套接字上建立。

  • 套接字是否可能“溢出”并且数据包丢失?
  • 从套接字中取出数据包并存储是否有任何好处 他们早早在POJO队列中?
  • 我的“网络”线程和队列设置确实是必要的 - 我应该直接使用BlockingQueue吗?

1 个答案:

答案 0 :(得分:4)

  

套接字是否可能“溢出”

您的套接字接收缓冲区可以填充到无法接受新数据报的位置。

  

并且数据包丢失了?

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

  

从套接字中获取数据包并将它们尽早存储在POJO队列中是否有任何优势?

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

  

我的“网络”线程和队列设置是否真的有必要 - 我应该直接使用DatagramSocket吗?

是的。