有什么办法可以让UDP丢包率更低吗?

Is there any way to make the UDP packet loss be lower?

我正在使用 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服务器丢包少一些吗?

谢谢。

丢包在网络中,唯一的编程选择是

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

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

注意:由于 UDP 是有损协议而 TCP 不是,许多路由器都经过优化以在 TCP 负载增加时丢弃 UDP 数据包(因为路由器希望任何丢弃的 TCP 数据包无论如何都会再次发送)

这可能意味着在负载下,您可以看到 UDP 的丢包率高于 TCP。