Ich renne WebSocket-Client auf einem Raspberry Pi, um ein Servo mit Daten von einem Sprung Motion WebSocket Server gesendet zu steuern. Die Menge an Daten, die durch die Sprungbewegung über die Websocket-Verbindung gesendet werden, ist so hoch, dass es eine lange Verzögerung gibt, bis der Pi die letzte Nachricht einholt, die umso schlechter wird, je länger sie läuft.Python WebSocket-Client, nur die neueste Nachricht in der Warteschlange
Wie kann ich alle alten Nachrichten in einer Warteschlange verwerfen und nur die neuesten Nachrichten verwenden? Derzeit wird diese ich tue:
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))
Sie benötigen einen Faden in eine lokale Warteschlange und einen Thread erhalten die neueste Nachricht aus der Warteschlange zu verarbeiten (alle anderen abwerfen), sobald der vorherige Zug beendet ist. – barny
Wird der andere Thread nicht unter dem gleichen Problem leiden und nicht in der Nähe der Warteschlange der Websocket-Nachrichten stehen? – Tom
Wenn Sie den recv tun, bevor Sie es tun, können Sie testen, ob es eine andere Nachricht gibt, lesen Sie alle und Aktion die letzte Nachricht? – barny