2016-12-07 6 views
4

私はMQTTパブリッシャーとサブスクライバーとして動作するdjangoアプリケーションを作成しています。djangoでpaho mqtt clientを使用するには?

ここでは、pahoクライアントを起動してloop_forever()関数を実行する必要があります。

wsgi.pyにする必要がありますか?

+0

'loop_forever()'は永遠にブロックされるので、おそらく自身のスレッドで開始されるはずです – hardillb

答えて

5

更新:

あなたはPAHOのモジュールを公開からヘルパー関数を使用することができ、あなたのDjangoアプリケーションからのメッセージを公開するために、複数のスレッドで実行されているDjangoのが必要な場合 - https://eclipse.org/paho/clients/python/docs/#id17 あなたは、インスタンスを作成する必要はありませんこの場合、mqttクライアントのループを開始してください。また、いくつかのトピックを購読するには、mqttクライアントをスタンドアロンスクリプトとして実行し、そこでDjangoアプリケーションのモジュールが必要です(スクリプト内でDjango環境を設定することを忘れないでください)。


以下の答えは、あなたが生産に普通ではない、単一のスレッドでジャンゴを実行する場合にのみ良いです。

mqtt.pyをアプリケーションフォルダに作成し、そこに関連するコードをすべて入れてください。たとえば、次のように

import paho.mqtt.client as mqtt 

def on_connect(client, userdata, rc): 
    client.subscribe("$SYS/#") 

def on_message(client, userdata, msg): 
    # Do something 
    pass 

client = mqtt.Client() 
client.on_connect = on_connect 
client.on_message = on_message 

client.connect("iot.eclipse.org", 1883, 60) 

ここloop_forever()を呼び出さないでください!

は、その後、あなたのアプリケーションに__init__.pyコールloop_start()

from . import mqtt 

mqtt.client.loop_start() 

loop_start()の代わりloop_forever()を使用するには、バックグラウンドスレッドをブロックしていないあなたを与えるだろう。

+0

ありがとうマックスはうまく動作します!!私は別の疑問を持っています。もしWebプロセスを拡大して複数のmqttクライアントを作成するとどうなりますか? もしそうなら、私はそれをどうやって止めるのですか? –

+0

@ RajaSudhan「ウェブプロセスをスケールする」とはどういう意味ですか? –

+0

本番環境でdjangoアプリケーションを実行している間、私はロードバランサを持つ複数のサーバに展開しているので、すべてのホストのメッセージを聞きたくありません。 –

関連する問題