python websocket-client,只接收队列中的最新消息

时间:2016-07-07 17:20:54

标签: python websocket raspberry-pi leap-motion

我在覆盆子pi上运行websocket-client,使用跳跃运动websocket服务器发送的数据来控制伺服。通过跳跃运动通过websocket连接发送的数据量如此之高,以至于pi赶上最近的消息会有很长的延迟,只有在运行的时间越长,消息就越差。

如何丢弃队列中的所有旧消息,并在检查时使用最新消息?目前我正在这样做:

ws = create_connection("ws://192.168.1.5:6437")
    while True:
        result = ws.recv()
        resultj = json.loads(result)
        if "hands" in resultj and len(resultj["hands"]) > 0:
                # print resultj["hands"][0]["palmNormal"]
                rotation = math.atan2(resultj["hands"][0]["palmNormal"][0], -resultj["hands"][0]["palmNormal"][1])
                dc = translate(rotation, -1, 1, 5, 20)
                pwm.ChangeDutyCycle(float(dc))

1 个答案:

答案 0 :(得分:1)

由于Leap服务以大约每秒110帧的速度发送数据,因此您有大约9ms的时间来进行任何处理。如果你超过这个,那么你将落后。最简单的解决方案可能是创建一个人工应用帧速率。对于每个循环,如果您还没有达到下次更新的时间,那么您只需获取下一条消息并将其丢弃。

2.0

(我还没有对您的代码进行此修改,因此通常的警告适用)