在Python中实时接收UDP数据包时出现延迟

时间:2016-07-20 10:35:43

标签: python udp

我使用Opentrack来跟踪头部动作,坐标通过UDP发送到我的Python程序。该程序在正确接收坐标的意义上起作用,但是我注意到在信息到达之前存在很大的延迟。

在观察到行为后,在我看来,跟踪软件将坐标发送到我的程序从中获取数据的某个缓冲区,但是我的程序获取数据的速度比缓冲区填满的速度慢。这意味着如果我移动我的头部,那么所有新坐标都已被检测到,但程序必须逐渐通过缓冲区,这会导致延迟。这是一个问题,因为我将其用作实时应用程序,需要立即将当前坐标发送到我的程序。

我不确定问题是否在Opentrack软件中,如果我应该向该社区寻求帮助,或者我是否可以在Python中修复它...

基本上,我只是希望没有缓冲区,而是只发送当前坐标(如果我的应用程序中丢失了一些测量坐标,则无关紧要)。

def connect(self, PORT):
    HOST = ''   # Symbolic name meaning all available interfaces
    #PORT = 8888 # Arbitrary non-privileged port

    # Datagram (udp) socket
    try :
        self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        print 'Socket created'
    except socket.error, msg :
        print 'Failed to create socket. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
        sys.exit()


    # Bind socket to local host and port
    try:
        self.s.bind((HOST, PORT))
    except socket.error , msg:
        print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
        sys.exit()

    print 'Socket bind complete'

#now keep talking with the client
def fetch(self):
    # receive data from client (data, addr)
    d = self.s.recvfrom(1024)
    data = d[0]
    addr = d[1]

    if data: 

        reply = 'OK...' + data

        self.s.sendto(reply , addr)

        unpacked_data = struct.unpack('dddddd', data)
        x = unpacked_data[0]
        y = unpacked_data[1]
        z = unpacked_data[2]
        return (x, y, z)

1 个答案:

答案 0 :(得分:0)

所以我通过添加行

解决了这个问题
self.s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1)

在我的代码中。这将缓冲区设置为1,这解决了我的问题。