Клиент Paho-mqtt на Django [дубликат]

Попробуйте использовать express.static (), если вы используете Node.js.

Вам просто нужно передать имя каталога, в котором вы сохраняете свои статические активы, в промежуточное программное обеспечение express.static, чтобы начать обслуживать файлы напрямую. Например, если вы сохраняете файлы изображений, CSS и JavaScript в каталоге с именем public, вы можете сделать это, как показано ниже:

i.e. : app.use (express.static ('public'));

Этот подход разрешил мою проблему.

Спасибо,

5
задан Raja Sudhan 7 December 2016 в 12:04
поделиться

1 ответ

Обновление:

Если вам нужно, чтобы Django работал в нескольких потоках, чтобы публиковать сообщения из вашего приложения Django, вы можете использовать вспомогательные функции из модуля Publish Paho - https://eclipse.org/ paho / clients / python / docs / # id17 Вам не нужно создавать экземпляр клиента mqtt и запускать цикл в этом случае. И чтобы подписаться на какую-то тему, рассмотрите возможность запуска mqtt-клиента как автономного скрипта и импорта необходимых модулей вашего Django-приложения (и не забудьте настроить среду 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() даст вам не блокировать фоновый поток.

5
ответ дан Max Polezhaev 18 August 2018 в 11:28
поделиться
  • 1
    Спасибо Макс, отлично работает! У меня есть еще одно сомнение: что произойдет, если я масштабирую веб-процесс, создав несколько клиентов mqtt? Если да, то как это остановить? – Raja Sudhan 7 December 2016 в 14:05
  • 2
    @RajaSudhan, что вы подразумеваете под «масштабированием веб-процесса»? – Max Polezhaev 7 December 2016 в 14:32
  • 3
    Во время запуска приложения django на производстве я развертываю на нескольких серверах с балансировщиком нагрузки, поэтому я не хочу слушать сообщения на всех хостах. – Raja Sudhan 15 December 2016 в 18:13
  • 4
    @RajaSudhan нормально, теперь я понимаю вашу озабоченность. Вы правы, если вы запускаете Django в нескольких потоках (как это обычно бывает при производстве), вы не должны запускать подписчика в каждом потоке, потому что on_message в этом случае будет запускать в каждом потоке для одного сообщения, но вы хотите, чтобы он огонь только один раз. Рассмотрите возможность запуска клиента mqtt как автономного скрипта и импорта необходимых модулей вашего приложения Django (не забудьте настроить среду Django в этом скрипте). – Max Polezhaev 16 December 2016 в 18:09
  • 5
    @RajaSudhan мой предыдущий комментарий был о подписке. А для публикации из Django вы можете использовать вспомогательные функции из модуля Publish Paho, см. Обновления моего ответа. – Max Polezhaev 16 December 2016 в 18:38
Другие вопросы по тегам:

Похожие вопросы: