2017-03-20 8 views
2

私は、Wifi経由で通信するシステム用のコードを書いています。これは、ルータ経由でUDPパケットをRaspberry Piに送信するAndroidデバイスで構成されています。送信される情報は非常にタイムクリティカルであり、パフォーマンスを向上させる方法として、古いパケットがバッファ内にある場合はPiにPythonコードを書き込もうとしています(データは制御インターフェイスの状態を示します)古いデータは役に立たない)。 Piは処理能力が限られているので、古いデータに対して余分な作業をしないようにしたい。次のようにコードが現在ある:古いUDPパケットを無視するPython

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 

私は8にバッファサイズを設定した場合(で送信されるデータのバイト数)は、それが唯一の8バイトに持参し、残りを廃棄することSOCK_DGRAMと知ります - これは私の目標を達成するか、これは最も古い8バイトをもたらすか、または他の何らかの振る舞いをしますか?

ありがとうございました!

答えて

0

"これは最も古い8バイトを持ちますか?"キューがFIFOとして実装されているため、以前に送信されたキューがキューの先頭にあるため、より早く終了します。 この問題を処理する1つの方法は、送信されるパケットにクライアントのデータが作成される時間を付加する、いわゆるプロトコルを自分で作成することです。この方法では、独自の基準に基づいて時代遅れのパケットを無視できます。臨床試験で:

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

私はそれが事実だと思った。私はその解決策を試してみる。ご協力いただきありがとうございます! –

関連する問題