Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如果我将DatagramPackages留在DatagramSocket会发生什么?_Java_Multithreading_Sockets_Udp_Blockingqueue - Fatal编程技术网

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

在Java中,如果我将DatagramPackages留在DatagramSocket会发生什么?,java,multithreading,sockets,udp,blockingqueue,Java,Multithreading,Sockets,Udp,Blockingqueue,我正在使用DatagramSocket构建一个网络应用程序 我有一个“网络”线程,其唯一任务是从DatagramSocket中提取DatagramPacket对象,并将数据放在BlockingQueue上。它尽可能快地做到这一点。该队列随后被其他线程使用 假设我的“网络”线程运行缓慢,数据包在套接字上堆积 套接字是否可能“溢出”并丢失数据包 从套接字获取数据包并存储数据包有什么好处吗 他们很早就排队了 我的“网络”线程和队列设置真的有必要吗?我是否应该直接使用DatagramSocket 套

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

我有一个“网络”线程,其唯一任务是从
DatagramSocket
中提取
DatagramPacket
对象,并将数据放在
BlockingQueue
上。它尽可能快地做到这一点。该队列随后被其他线程使用

假设我的“网络”线程运行缓慢,数据包在套接字上堆积

  • 套接字是否可能“溢出”并丢失数据包
  • 从套接字获取数据包并存储数据包有什么好处吗 他们很早就排队了
  • 我的“网络”线程和队列设置真的有必要吗?我是否应该直接使用
    DatagramSocket
套接字是否可能“溢出”

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

包丢失了吗

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

从套接字获取数据包并尽早将其存储在POJO队列中有什么好处吗

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

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


是的。

谢谢您的回复。我的
BlockingQueue
设置的一个优点是我可以精确控制消息缓冲区的大小吗?您也可以在限制范围内控制套接字接收缓冲区的大小。我看不出养狗和自己吠叫有什么好处。@I_有帮助吗?“包总是可能丢失”的哪一部分你不明白吗?@EJP-只是必须提供一个适当的理由,因为也可能存在物理障碍。我只是想让你在那一点上说得更具体些。顺便说一句,我已经对你的答案投了更高的票。@我对你有帮助吗?那么为什么不先说呢?但在我看来,这些信息并没有从答案中消失,也没有从问题中消失。”“永远”仍然是“永远”。