全部产品
云市场

RRPC能力

更新时间:2019-03-27 11:09:28

功能介绍

MQTT协议是基于PUB/SUB的异步通信模式,这种通讯模型不适用于服务端同步控制设备端返回结果的场景。物联网平台基于MQTT协议制定了一套请求和响应的同步机制,无需改动MQTT协议即可实现同步通信。物联网平台提供API给服务端,设备端只需要按照固定的格式回复PUB消息,服务端使用API,即可同步获取设备端的响应结果。

详细关于RRPC的介绍请见阿里云物联网平台文档 用户指南/RRPC 章节。https://help.aliyun.com/document_detail/90567.html

RRPC是指客户云端通过云端API发起一个RRPC调用,该调用将同步返回设备的响应。设备端会收到一个同步请求的topic, 格式如/ext/rrpc/{messageId}/{rrpc_topic}, 设备端接收到该消息后,进行处理,并将处理结果以Message的方式publish到/ext/rrpc/{messageId}/{rrpc_topic}。Python的SDK已经提供了相应的细节封装。

云端有两种场景会涉及到RRPC的调用

SDK使用

版本需求

Aliyun IoT Python SDK version >= 1.1.0

RRPC使用 - 普通RRPC Topic

通过设置on_topic_rrpc_message 的回调来处理RRPC的Topic请求

  1. linkkit.on_topic_rrpc_message = on_topic_rrpc_message
  2. ...
  3. def on_topic_rrpc_message(self, id, topic, payload, qos, userdata):
  4. print("on_topic_rrpc_message: id:%s, topic:%s, payload:%s" % (id, topic, payload))
  5. self.linkkit.thing_answer_rrpc(id, payload)

所有的RRPC请求处理完成后,必须通过 thing_answer_rrpc 进行回应,id为rrpc请求的id, payload为返回报文的payload。

针对此类的RRPC,云端SDK可以通过Rrpc接口进行调用,并获得同步的返回结果

RRPC使用 - 物模型服务

通过设置on_thing_call_service 的回调来处理同步类型的service请求

  1. linkkit.on_thing_call_service = on_thing_call_service
  2. ...
  3. def on_thing_call_service(self, identifier, request_id, params, userdata):
  4. print("on_thing_call_service: identifier:%s, request_id:%s, params:%s" % (identifier, request_id, params))
  5. ...
  6. self.linkkit.thing_answer_service(identifier, request_id, 200, {})

所有的service请求处理完成后,必须通过 thing_answer_service 进行回应,request_id为请求的request_id。

针对此类的Service,云端SDK可以通过InvokeThingsService接口进行调用,并获得同步的返回结果