在堆栈溢出上,存在一个有关通过MQTT实现请求/响应交互的问题。作为一个答案,您可以通过在一个主题上发布请求并在请求中包含的另一个令牌上侦听响应来实现。

它有点尴尬,但是它可以工作。

由于MQTT在整个IoT中被广泛使用,我想知道是否有为了互操作性而试图标准化此RPC类型交互的尝试吗?

评论

刚刚发现,这可能是答案的基础:e-s-r.net/download/specification/ESR030-LWM2M-MQTT-1.0-A.pdf。不可否认,没有将通用请求/响应规范与LWM2M紧密耦合。

#1 楼

我不知道有任何这样的标准。

正如在另一个问题的答案中指出的那样,pub / sub并不适合RPC,但可以弯曲以适应。

MQTT的优势之一是有效载荷可以是任何东西,从而使开发人员可以为他们的项目做出最佳选择。

#2 楼

我不确定您对MQTT上的标准化RPC通信方法有什么要求,但是我仍然进行了一些搜索,发现有几点可以提供给您。

首先,关于标准方法。在一个Github的rpc项目上,描述的内容很完善:


该模块为mqtt连接提供了一个rpc接口,实质上这是一种使用MQTT主题结构的请求和响应策略。


重点是使用堆栈模型(OSI模型是标准),而仅将MQTT用作堆栈的层之一。

该项目在mqtt上的json-rpc上使用MQTT上的标准化协议或至少众所周知的协议。

关于尴尬,您不必从头开始构建MQTT和RPC,而可以使用以下方法之一链接的库或在Github上找到的其他库。

好吧,每种语言在Github上都没有现成的基础,但是在这种情况下,合规性成为计划标准,并且可能会影响整个其他项目。 。

评论


我没有真正的要求。该问题的推动力是将CoAP(具有RFC定义的请求/响应和pub / sub机制)与MQTT进行比较,我可以确定,MQTT现在只有标准化的pub / sub。当然,拥有一些用于RPC的开源库总比没有好。

–克里斯·斯坦巴赫
17年9月19日在18:48

#3 楼

Azure IoT中心具有直接方法的概念:


IoT中心使您能够从云中调用设备上的直接方法。


这是通过MQTT实现的(不支持AMQP),其中


设备接收有关MQTT主题的直接方法请求:


$iothub/methods/POST/{method name}/?$rid={request id}.


他们已将其包装在他们的SDK中,因此开发人员无需担心专门监视该主题。您可以实现类似的方法。

根据其他答案,pub-sub并不适合RPC,据我所知没有任何标准。

更多文档在这里。