CZGL.AliIoTClient 將 Topic 分爲五種css
分別是:普通Topic、屬性上報、屬性下發、事件上報、服務調用,除了普通 Topic,每種 Topic 都有消息的發送、響應。html
普通 Topic ,消息發送或,根據 MQTT 協議,SDK 嚴格保證消息可以到達另外一端。
設備推送屬性、事件等數據到服務器,則服務器要響應,
服務器推送(下發)數據到設備,則設備要響應。
固然,這些響應無關緊要,無實質的影響。node
每種、每一個 Topic 都有特定的 MQTT 通信地址,這些地址已經在 CZGL.AliIoTClient 中自動生成,你僅需填寫普通 Topic 的通信地址便可。git
訂閱 Topic 前,須要在阿里雲物聯網定義相應的 Topic 以及設置 訂閱
權限,
普通 Topic ,使用 string[] 包含列表,而後在調用鏈接方法時做爲參數傳入,亦可在鏈接服務器後,添加須要的訂閱。
普通 Topic 能夠動態添加,屬於 熱訂閱 。json
使用方法:服務器
// 設置要訂閱的Topic、運行接收內容的Topic string[] topics = new string[] { client.CombineHeadTopic("get"), "/a1xrkGSkb5R/mire/user/get1" }; client.ConnectIoT(topics,null,60);
Topic 地址比較長,你能夠記錄 .../user/
後的內容,使用 CombineHeadTopic()
可自動生成,less
client.CombineHeadTopic("get")
當你使用屬性、事件、服務功能,對服務器進行數據傳輸時,服務器會作出響應,你能夠選擇接收響應,也能夠不接收響應。
CZGL.AliIoTClient 默認不接收服務器的響應信息。實際上這些響應信息通常只在調測時須要。ui
響應方法 | 說明 |
---|---|
OpenEventPostReply() | 接收上報事件後服務器的響應 |
OpenPropertyPostReply() | 接收設備屬性上傳後服務器的響應 |
OpenPropertyDownPost() | 容許服務器下發設置設備屬性指令 |
注意,這些響應,必須在鏈接客戶端前設置,而且在客戶端已經鏈接後,不能再使用以上方法,不然會彈出異常。
已修復,你能夠在程序的任意階段打開接收功能,任意取消和打開。阿里雲
查看這些功能是否打開:spa
public CZGL.AliIoTClient.OpenTopic getOpenTopic()
OpenTopic
具備 8 個屬性,用於獲取或設置是否打開某種功能的接收。
屬性 | 說明 | 默認值 |
---|---|---|
CommonTopic | 是否接收普通Topic | 固定爲true,不能更改 |
PropertyUpRawReplyTopic | 設備上傳透傳屬性數據後服務器的響應 | false |
PropertyPostReplyTopic | 設備上傳Alink json屬性數據後服務器的響應 | false |
PropertyDownRaw | 服務器下發設置屬性的命令,透傳 | false |
PropertyDownPost | 服務器下發設置屬性的命令,Alink json | false |
EventUpRawReply | 設備事件上報,接收服務器的響應,透傳 | false |
EventPostReply | 設備事件上報,接收服務器的響應,Alink json | false |
ServiceDownRaw | 服務器調用服務,透傳 | false |
ServicePostRaw | 服務器調用服務,Alink json | false |
因爲區分 透傳 和 Alink json,如果透傳,設置上面的 Alink json 項,是無效的,反之亦然。
3)鏈接服務器後
在鏈接服務器後,你還能夠增長要訂閱的普通 Topic:
public void TopicAdd(string[] topics, [byte[] QOS = null])
示例:
client.TopicAdd(new string[]{ client.CombineHeadTopic("get") })
移除已經訂閱的 Topic:
public void TopicRemove(string[] topics)
在鏈接服務器後,能夠取消接收服務器的響應信息,可是不能再從新接收。
方法 | 說明 |
---|---|
CloseEventPostReply() | 再也不接收設備上傳事件後服務器的響應 |
ClosePropertyPostReply() | 再也不接收設備上傳屬性後服務器的響應 |
ClosePropertyDownPost() | 不容許服務器下發設置設備屬性的指令 |
你能夠在客戶端鏈接服務器後,取消接收響應。可是,取消後,不能再訂閱!
已修復,你能夠在程序任意階段取消後再打開接收。
獲取已經訂閱的Topic列表:
public string[] GetSubedList { get; }
示例:
var topicList = client.GetSubedList;
服務器設置設備屬性、調用服務等功能,因爲採用 MQTT 通信,是訂閱/推送形式的,因此,不管什麼功能的數據傳輸,本質仍是Topic。 所以,那些設備屬性上報、設置設備屬性等,能夠配置 Topic 屬性。
CZGL.AliIoTClient 中,客戶端能夠訂閱須要的 Topic,鏈接服務器後,服務器能夠向全部 Topic 發送數據,但只有客戶端指定訂閱的 Topic,客戶端纔會接收到推送,否則不管在控制檯怎麼點擊發送,客戶端都是不會接收到的。
有個地方須要注意的是,對於普通Topic,是隨客戶端鏈接時的配置,決定服務器是否可以推送消息到客戶端,動態的。
而屬性、事件、服務這些功能,會保存上一次的配置。當你打開
client.OpenPropertyPostReply();
接收屬性上傳到服務器的響應後,在程序刪除
client.OpenPropertyPostReply();
再次運行,依然會接收到響應,除非設置
client.ClosePropertyPostReply();
設備上傳數據到服務器,服務器會作出響應,固然,服務器設置設備屬性、調用設備服務時,客戶端也能夠作出響應。將在後面的章節講述。