単一のデバイスに接続すると、データが送信されているかどうかを定期的にチェックするために開いた接続を維持するPythonソケット(またはSocketServer)を作成したいと思います。ソケットは1つの接続のみをリッスンします。
例えば:
def get_data(conn):
response='back atcha'
data = conn.recv(1024)
print 'get_data:',data
if data:
conn.send(response)
s = open_socket()
conn, addr = s.accept()
while True:
print 'running'
time.sleep(1)
get_data(conn)
#do other stuff
サーバーソケットがバインドされ、接続が受け入れられると、接続しているクライアントがデータを送信するか、ソケットを閉じるまで、.recvを実行するときにソケットがブロックされます。不規則なデータ(数秒、1日になる可能性があります)を待っていて、その間にプログラムが他のタスクを実行する必要があるため、このブロッキングが問題になります。
サーバーとの間でいつでもデータを送信(または受信)する必要がある可能性があるため、クライアントがソケットを閉じないようにします。これを別のスレッドで実行する唯一の解決策ですか、または接続を永久に維持するようにクライアント/サーバーソケットを設定する簡単な方法があります(これは安全ですか?VLAN上で実行されます)が、データを受信しましたか?