这一节我们来设计和实现 IotHub 设备间通信功能。
设备间通信
到目前为止,我们在 MQTT 协议上抽象出了服务端和设备端,数据的流向是从服务端(业务系统,IotHub)到设备端,或者从设备到服务端。在某些场景下,接入 IotHub 的设备可能还需要和其他接入的设备进行通信,例如管理终端通过 P2P 的方式查看监控终端的实时视频,在建立 P2P 的连接之前,需要管理终端和监控终端进行通信,交换一些建立会话的数据。
两个不同的设备 DeviceA、DeviceB 作为 MQTT Client 接入 EMQ X Broker,他们直接进行通信的流程很简单,DeviceA 订阅主题 TopicA,DeviceB 订阅主题 TopicB,如果 DeviceA 想向 DeviceB 发送信息,只需要向 TopicB 发布消息就可以了,反之亦然。
不过 IotHub 和 DeviceSDK 需要对这个过程进行抽象和封装,DeviceSDK 需要对设备应用代码屏蔽掉 MQTT 协议层的细节,做到以下功能:
- 设备间以 DeviceName 作为标识发送消息;
- 当 DeviceA 收到 DeviceB 的消息时,它知道这个消息是来自 Device B 的,可以通过 Device B 的DeviceName对 Device B进行回复。