2015-09-04 114 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更高的丟包率。