【发布时间】:2021-10-01 09:42:36
【问题描述】:
我正在为飞行模拟器创建仪表板。 sim 通过 UDP 发送数据,面板解析这些数据并使用它来转换和渲染 SVG。该面板在 Linux 上运行。
sim 发送 UDP 帧的速度超过了面板的渲染速度,因此帧排队,面板最终落后于 sim 几秒钟。除了the MSG_PEEK flag,我还没有找到任何关于如何配置或管理此队列的建议,这与我想要的完全相反。
每个 UDP 帧都包含完整的键/值对集,因此理想情况下,我会在收到新帧时丢弃队列中的所有旧帧。
我该怎么做:
- 读取下一帧并丢弃队列中的任何后续帧
- 读取最近的帧并丢弃其余帧
- 将队列大小设置为 1 或较小的数字
我确信有一个简单的方法可以做到这一点,但一个小时左右的搜索和实验还没有找到解决方案。
这是当前面板代码的表示:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("",54321))
sock.settimeout(0.5)
while True:
try:
frame = sock.recv(1024)
parse_and_render(frame)
except socket.timeout:
pass
【问题讨论】:
标签: python python-3.x sockets udp python-sockets