如何解决如何让 UDP 套接字丢弃最旧排队的数据包而不是新的传入数据包?
这里是场景:我有一个实时(ish)GUI 显示,它显示网络中服务器上某些传感器的当前状态,我需要显示尽可能低延迟,所以我的服务器正在通过 UDP 数据包向客户端计算机发送高频更新。
有时(由于原因)客户端 UDP 套接字的传入 UDP 数据包缓冲区 (SO_RECV) 可能会填满,此时缓冲区中没有空间用于下一个传入数据包。在这种情况下,操作系统只会丢弃传入的数据包,然后继续运行。
...然而,对于我们试图最小化延迟的系统来说,这种行为并不理想,因为更有价值的“新鲜”数据包(其中包含最新的传感器值)具有已丢失,以便保留已经存在于套接字接收缓冲区中的现在冗余(因此无用)的“旧”数据。
所以问题是,有没有办法告诉 UDP 套接字,当它因为接收缓冲区已满而需要丢弃数据包时,它应该丢弃缓冲区中最旧的数据包 em> 为新收到的数据包腾出空间,而不是丢弃新数据包并保留旧数据包? (请注意,由于 UDP 可以随时出于任何原因丢弃任何数据包,因此没有理由不能这样做)
(我意识到我可以通过例如将高优先级线程专用于从 UDP 套接字读取数据来解决这个问题,从而确保缓冲区永远不会首先填满,但这似乎是一个相当复杂和活泼的解决可以通过对套接字的内置缓冲逻辑进行简单调整来避免的问题)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。