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