【发布时间】:2019-08-19 08:50:50
【问题描述】:
我有一个 Flask 应用程序,它通过 mosquitto 代理 (v 1.6.4) 订阅 MQTT 主题。直接运行时(使用 Flask 自己的服务器),客户端连接、订阅和接收消息。当应用由 uWSGI 服务器 (v 2.0.17) 提供服务时,客户端连接、订阅但不接收消息。
两种情况下客户端的日志如下。只有在第一种情况下才会收到消息。
使用 Flask 自己的服务器运行时:
python 项目.py
发送 CONNECT (u1, p1, wr0, wq0, wf0, c1, k60) client_id=b'full-client-54'
收到 CONNACK (0, 0)
发送 SUBSCRIBE (d0, m1) [(b'/topics/drone/battery', 0)]
收到 SUBACK
收到 PUBLISH (d0, q0, r0, m0), '/topics/drone/battery', ... (76 bytes)
使用 uWSGI 运行时:
uwsgi --socket 0.0.0.0:8080 --protocol=http -w project:app -H env --workers 1
发送 CONNECT (u1, p1, wr0, wq0, wf0, c1, k60) client_id=b'full-client-54'
收到 CONNACK (0, 0)
发送 SUBSCRIBE (d0, m1) [(b'/topics/drone/battery', 0)]
收到 SUBACK
客户端代码如下:
import paho.mqtt.client as mqtt
import flask
import json
app = flask.Flask(__name__)
def on_connect(client, userdata, flags, rc):
client.subscribe(BATTERY_TOPIC)
def on_message(client, userdata, msg):
data = json.loads(msg.payload)
# custom code
def on_log(client, userdata, level, buf):
print(buf)
client = mqtt.Client('full-client-54')
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username=USER_NAME, password=PWD)
client.on_log=on_log
try:
client.connect(BROKER_IP)
client.loop_start()
except Exception:
print('Exception when connecting to mqtt broker')
有谁知道为什么使用此设置,当 MQTT 客户端由 uWSGI 提供服务时,无法正确接收消息?
【问题讨论】: