当前位置:  开发笔记 > 编程语言 > 正文

如何最大限度地减少UDP丢包

如何解决《如何最大限度地减少UDP丢包》经验,为你挑选了1个好方法。

我每秒接收~3000个UDP数据包,每个数据包大小约为200字节.我写了一个java应用程序,它监听那些UDP数据包并将数据写入文件.然后,服务器以先前指定的速率发送15000条消息.写入文件后,它只包含~3500条消息.使用wireshark我确认我的网络接口收到了所有15000条消息.之后我尝试更改套接字的缓冲区大小(最初为8496bytes):

(java.net.MulticastSocket)socket.setReceiveBufferSize(32*1024);

该更改将保存的消息数量增加到~8000.我不断将缓冲区大小增加到1MB.之后,保存的消息数量达到~14400.将缓冲区大小增加到更大的值不会增加保存的消息数.我想我已达到允许的最大缓冲区大小.不过,我需要捕获网络接口收到的所有15000条消息.

任何帮助,将不胜感激.提前致谢.



1> tialaramex..:

闻起来就像一个bug,很可能在你的代码中.如果UDP数据包通过网络传送,它们将排队等待本地传送,正如您在Wireshark中看到的那样.也许你的程序只是没有及时从其套接字读取进展 - 是否有专门的线程来执行此任务?

您可以通过检测程序丢失哪些数据包来取得一些进展.如果丢失的所有数据包都是早期数据包,则可能是在程序等待接收数据之前发送数据.如果他们都晚了,也许它会很快退出.如果它们是固定间隔,则代码中可能会出现一些问题,这些问题会导致接收数据包.等等

在任何情况下,你似乎都特别担心丢失的数据包.根据设计,UDP不是可靠的传输方式.如果丢失这些多播数据包对您的系统来说是一个问题(而不仅仅是出于性能原因而想要解决的一个谜),那么系统设计是错误的.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有