FlaskSocketio仅为第一条消息发出

2024-10-01 17:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

使用烧瓶Socketio和烧瓶Mqtt:

@mqtt.on_message()
def handle_mqtt_message(client, userdata, message):

    ### Extract from Payload ###
    payload_list = message.payload.decode().split()
    time_list = [int(x) for x in re.split(r'[-T:.]', payload_list[2])]
    tstmpObj = datetime(time_list[0], #Year
                        time_list[1], #Month
                        time_list[2], #Day
                        time_list[3], #Hour
                        time_list[4], #Minute
                        time_list[5]  #Sec
                        )

    ### make dict from payload data ###
    data = dict(mssid = random.randint(0,10000),
                fduid = "FDU-"+message.topic[-6:],
                evnty = payload_list[0],
                tstmp = tstmpObj.strftime("%a, %d %b %Y - %I:%M:%S %p"),
                locur = payload_list[1])

    ### Print dictionary ###
    print(data)

    ### Real-Time Alert on webpage ###
    socketio.emit('mqtt_message', data=data)

    ### Insert message into database ###
    with create_app().app_context():
        event = Evntlg(fduid = data['fduid'],
                        evnty = data['evnty'],
                        tstmp = tstmpObj,
                        locur = data['locur'])
        db.session.add(event)
        db.session.commit()

emit()只在第一个onMessage()上起作用,在第二个onMessage()之后不起作用。 我正在使用应用程序工厂和蓝图。 所有收到的消息仍正确插入数据库

##编辑## 与monkey patching相关的代码-在应用程序运行之前就开始修补

import eventlet
eventlet.monkey_patch()

from floodwatch import create_app, socketio

app = create_app()

if __name__ == "__main__":
    socketio.run(app, host='localhost', port=5000, debug=True)

我必须在终端中按住CTRL-C键,然后再次启动它才能再次获取RT消息——但这也是第一次,而且在同一个会话中不会再出现


Tags: fromappmessagedata烧瓶timecreatemqtt

热门问题