有没有办法让UDP数据包丢失更低?

时间:2015-09-04 07:38:52

标签: java sockets udp

我正在使用UDP客户端每秒发送大约20k个请求,并且每个请求都包含<1k数据。我需要通过Java实现UDP服务器。 编码如下:

public void startRecieve() throws IOException {
    udpSocket = new DatagramSocket(Constant.PORT);
    byte[] buffer = new byte[Constant.SIZE];
    udpPacket = new DatagramPacket(buffer, buffer.length);

    int len;
    while (true) {
        udpSocket.receive(udpPacket);
        len = udpPacket.getLength();
        if (len > 0) {
            // handing the data using other thread pool
        }
    }
}

有没有办法让UDP服务器丢包率降低?

感谢。

1 个答案:

答案 0 :(得分:2)

数据包丢失在网络中,唯一的编程选项是

  • 发送较少的数据,例如压缩它或
  • 重新发送有关丢失的数据,以减少数据丢失。
  • 使用TCP来处理数据包丢失。
  • 使用像Aeron这样的库,它使用UDP并为您处理数据包丢失。

最好的解决方案几乎总是修复网络以减少损失,但是有一种策略可以接受一些损失。

注意:由于UDP是一种有损协议,但TCP不是,许多路由器都经过优化,可以在TCP负载增加时丢弃UDP数据包(因为路由器预计任何丢弃的TCP数据包都会再次发送)

这可能意味着在负载下,UDP可以看到比TCP更高的数据包丢失。