可以使用MQTT来实现请求/响应行为

时间:2013-04-09 21:05:10

标签: android http mqtt

我们计划使用MQTT将消息从我们的服务器传递到Android设备 我们决定使用开源服务器mosquitto。

在大多数情况下这已经足够了。(发布/订阅) 但是我们有一种情况,客户端需要发送参数并从服务器获得响应。 我知道直接的方法是使用Http(例如Servlets)。 但我们能否使用MQTT实现这一目标,因为它意味着用户的带宽消耗更低?

4 个答案:

答案 0 :(得分:8)

是的,它只需要仔细设计您的主题结构。作为一个非常简单的示例,您可以发布到control/<client id>/request并订阅control/<client id>/response

答案 1 :(得分:4)

我建议您查看RabbitMQ handles RPC的方式。尽管AMQP与MQTT不同,但仍存在相当多的高级别结转。

归结为您需要能够使用消息标题创建具有关联ID的短暂“回复”队列。或者@ralight说每个客户都有两个队列。为每个客户端打开两个队列的问题当然是排序,因此您必须在内部使用关联ID和缓冲区和路由(或者如果您的应用是同步的,则删除相关ID)。

答案 2 :(得分:3)

从MQTT版本5开始,这是可能的。规范中指定了请求/响应模式。

看看这个:https://stackoverflow.com/a/59916330/1137669

答案 3 :(得分:0)

您还可以使用xargs完成相同的操作。

以下是一个shell脚本示例:

mqtt_eg_link.sh

d=$(date +%Y-%m-%d)
mosquitto_pub -h <your host> -p 1880 -t status/ghost/log -m "$d >> eg listener running"
mosquitto_sub -h <your host> -p 1880 -t ghost | xargs -t -I {} cmd.exe /c eg.bat {}