Python 忽略旧的UDP数据包

Python 忽略旧的UDP数据包,python,performance,sockets,networking,udp,Python,Performance,Sockets,Networking,Udp,我正在为一个通过Wifi进行通信的系统编写代码,该系统由一个Android设备组成,该设备通过路由器向Raspberry Pi发送UDP数据包。发送的信息对时间非常关键,为了提高性能,我正在尝试为Pi编写python代码,以便在缓冲区中有较新的数据包时忽略旧数据包(数据表示控制接口的状态-旧数据无用)。由于Pi的处理能力有限,我希望避免对旧数据做额外的工作。目前的代码如下: import time import socket #This section of code creates the

我正在为一个通过Wifi进行通信的系统编写代码,该系统由一个Android设备组成,该设备通过路由器向Raspberry Pi发送UDP数据包。发送的信息对时间非常关键,为了提高性能,我正在尝试为Pi编写python代码,以便在缓冲区中有较新的数据包时忽略旧数据包(数据表示控制接口的状态-旧数据无用)。由于Pi的处理能力有限,我希望避免对旧数据做额外的工作。目前的代码如下:

import time
import socket

#This section of code creates the socket and shows that it is running
UDP_IP = ''
UDP_PORT = 2016
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))

while(1):
    data, addr = sock.recvfrom(1024) #receives UDP packets, buffer size is 1024 bytes
    # do time critical stuff with data
我知道使用SOCK_DGRAM时,如果我将缓冲区大小设置为8(发送的数据中的字节数),它只会引入8个字节,而丢弃其余的字节-这会实现我的目标,还是会引入最旧的8个字节,或者有其他行为

谢谢你的帮助

“这会带来最早的8个字节吗?”是的,因为队列被实现为一个,较早发送的字节位于队列的前部,因此较早离开。 处理这个问题的一种方法是自己创建一个所谓的协议,将在客户端创建数据的时间附加到正在发送的数据包上。这样,您可以根据自己的标准忽略过时的数据包。在床上:

from datetime import datetime
packet = b'{}:some data'.format(datetime.now())

我以为是这样的。我试试那个解决办法。谢谢你的帮助!