有什么办法可以让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。
我正在使用 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。