当Flask客户端在uWSGI之后运行时未收到MQTT消息

问题描述 投票:0回答:1

我有一个Flask应用程序,该应用程序通过mosquitto代理(v 1.6.4)订阅MQTT主题。当直接运行(使用Flask自己的服务器)时,客户端将连接,订阅和接收消息。当该应用由uWSGI服务器(v.2.0.17)提供服务时,客户端将连接,订阅但不接收消息。

两种情况下来自客户端的日志如下。仅在第一种情况下才收到消息。

使用Flask自己的服务器运行时:

python project.py

发送连接(u1,p1,wr0,wq0,wf0,c1,k60)client_id = b'full-client-54'

收到的CONNACK(0,0)

发送订阅(d0,m1)[(b'/ topics / drone / battery',0)]

收到的SUBACK

收到的发布(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

发送连接(u1,p1,wr0,wq0,wf0,c1,k60)client_id = b'full-client-54'

收到的CONNACK(0,0)

发送订阅(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')

没有人知道为什么通过此设置在uWSGI为MQTT客户端提供服务时不能正确接收消息吗?

flask mqtt uwsgi
1个回答
0
投票

你也一样。解决方案是将uwsgi更改为gunicorn,效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.