2017-01-20 14 views
0

MQTT lib(https://pypi.python.org/pypi/paho-mqtt/1.1)に問題があります。MQTTとFlaskを使用してWeb上でレスポンスを作成する方法は?

複数のリクエストに対して非同期および同期タスクを実行したいが、on_messageがコールバック関数であるため、実際に購読されたメッセージを受信したときにリクエストされたurl/mqttに対してWebでレスポンスを発行することはできないようだ。 GETメッセージは、あなたがclient.disconnect

サンプル・コードを使用することができたときにloop_forever停止するには

@app.route('/mqtt', methods=['POST', 'GET']) 
def main(): 
      client = mqtt.Client() 
      client.on_connect = on_connect 
      client.on_message = on_message 
      test = on_message 
      client.username_pw_set('x', 'x') 
      client.connect("x", 1883, 60) 
      client.subscribe("/message/1") 

      client.loop_forever() 

      # how do I get the message from callback function on_message and then stop loop_forever? 
#I thought about: return msg but it doesn't work. 


def on_connect(client, userdata, flags, rc): 
    print("Connected with result code " + str(rc)) 

# The callback for when a PUBLISH message is received from the server. 
def on_message(client, userdata, msg): 
    #how to pass this msg to the main function? 


    print(msg.topic + " " + str(msg.payload)) 

答えて

0

:main関数にメッセージを渡すには

def on_message(client, userdata, msg): 
    print(msg.topic + " " + str(msg.payload)) 
    client.disconnect() # disconnect when get message 

を、あなたは単にグローバル変数を使用することができます。しかし私の提案は、mqttクライアントのために別のプロセスを開始し、共有メモリを介して変数を渡すことです。毎回GETまたはPOSTを取得すると、mqttブローカに接続するためのオーバーヘッドが大きくなります。

関連する問題