2015-09-04 112 views
0

我正在使用UDP客户端发送每秒约20k个请求,每个请求的数据为1k个<。我需要通过Java实现一个UDP服务器。 编码类似以下内容:有没有办法让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

感谢您的快速评论。有没有编程建议? – andy

+0

你对此有何评论?你怎么知道丢失的包? – Malkocoglu

回答

2

分组丢失是在网络中,唯一的编程选项是

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

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

注:如UDP是一种有损协议,但TCP不是,很多路由器优化丢弃UDP数据包时,TCP负载增加(如路由器预计,任何丢弃的TCP数据包将只被再次发送反正)

这可能意味着在负载下,UDP可能比TCP更高的丢包率。