Python如何在REST请求中等待异步MQTT消息

Python如何在REST请求中等待异步MQTT消息,python,django,rest,asynchronous,mqtt,Python,Django,Rest,Asynchronous,Mqtt,我正在Django中开发一个REST服务,当服务器中收到请求时,就会发布MQTT消息,并在主题中收到响应。MQTT通信是异步的,但REST是同步的,我想知道如何在REST请求内部等待MQTT异步事件。例如,我曾考虑在数据库中注册所有MQTT响应,并在REST中对DB进行轮询,但现在我不知道这是否是最佳解决方案 @require_http_methods(["GET"]) def getvalue(request): topic = "send/784980/566734/922

我正在Django中开发一个REST服务,当服务器中收到请求时,就会发布MQTT消息,并在主题中收到响应。MQTT通信是异步的,但REST是同步的,我想知道如何在REST请求内部等待MQTT异步事件。例如,我曾考虑在数据库中注册所有MQTT响应,并在REST中对DB进行轮询,但现在我不知道这是否是最佳解决方案

@require_http_methods(["GET"])    
def getvalue(request):

    topic = "send/784980/566734/9227445/foo/foo/01/send"
    msg = 'SJDUEHRYT756'

    logger.info('Topic: ' + topic + ", msg: " + msg)

    if connected == False:
        errorMsg = '{ "error":"No MQTT connection available" }'
        logger.error(errorMsg)
        return HttpResponse(status=500, content=errorMsg, content_type="application/json")

    mqttResult = client.publish(topic, msg, 0, False)
    logger.debug("MQTT request published with id " + str(mqttResult[1]))    

    // here I should get MQTT response for sending it back

    return HttpResponse(json.dumps({}), content_type="application/json")


def on_message(client, userdata, msg):
    logger.debug(msg.topic + " " + str(msg.payload))        

这一切听起来相当可怕。你能扭转局面吗?让一个MQTT客户机订阅这个主题,当MQTT消息传入时,这个客户机对DJANGO进行REST调用?流是客户机请求->服务器->MQTT->服务器->客户机响应,你说的“扭转局面”是什么意思?“扭转局面”而不是DJANGO显式地等待响应,当响应到来时,该客户端调用django并触发下一步,这可能是处理响应中的数据。所以:客户端请求->服务器->mqtt->设备,然后该操作结束,然后设备->mqtt->客户端适配器->服务器进行响应。@Blackishop您找到了解决方案吗?我也有同样的情况。