mqttnet 簡記


1.mqttnet開源庫,https://github.com/chkr1011/MQTTnet

2.服務器端和客戶端

服務器端和客戶端兩個,他們需要保持長連接,主要是通過訂閱和發布來進行消息的傳遞交換。

MQTT 服務端主要用於與多個客戶端保持連接,並處理客戶端的發布和訂閱等邏輯。一般很少直接從服務端發送消息給客戶端(可以使用 mqttServer.Publish(appMsg); 直接發送消息),多數情況下服務端都是轉發主題匹配的客戶端消息,在系統中起到一個中介的作用。

而客戶端主要是通過向服務端訂閱它感興趣(主題)的消息,另一些客戶端向服務端發布(主題)消息,服務端將訂閱和發布的主題進行匹配,並將消息轉發給匹配通過的客戶端。

3連接,通信

(1)服務器端啟動服務:

 

 public static IMqttServer mqttServer = null;

// 配置一個mqtt服務.
var optionsBuilder = new MqttServerOptionsBuilder()
//連接記錄數,默認 一般為2000
.WithConnectionBacklog(2000)
//服務器連接端口
.WithDefaultEndpointPort(port)
//連接驗證器
.WithConnectionValidator(ValidatingMqttClients())
//持續會話
.WithPersistentSessions()

;
// 建立一個MQTT服務.
mqttServer = new MqttFactory().CreateMqttServer();
mqttServer.ApplicationMessageReceived += MqttServer_ApplicationMessageReceived;
mqttServer.ClientSubscribedTopic += MqttServer_ClientSubscribedTopic;
mqttServer.ClientUnsubscribedTopic += MqttServer_ClientUnsubscribedTopic;
mqttServer.ClientConnected += MqttServer_ClientConnected;
mqttServer.ClientDisconnected += MqttServer_ClientDisconnected;

//啟動mqtt服務
await Task.Run(async () => { await mqttServer.StartAsync(optionsBuilder.Build()); });

 

(2)客戶端

與服務器端連接

連接語句:

 

 

 private IMqttClient mqttClient = null; 

 

//實例化 創建客戶端對象
var Factory = new MqttFactory();
mqttClient = Factory.CreateMqttClient();
mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived;
mqttClient.Connected += MqttClient_Connected;
mqttClient.Disconnected += MqttClient_Disconnected;

//調用異步方法連接到服務端

await mqttClient.ConnectAsync(option());

 

 

 

option的信息設置:

public IMqttClientOptions option()
{
//連接到服務器前,獲取所需要的MqttClientTcpOptions 對象的信息
var options = new MqttClientOptionsBuilder()
.WithClientId(ClientId)                    // clientid是設備id
.WithTcpServer(IP, Port)              //onenet ip:183.230.40.39    port:6002
.WithCredentials(UserName,pwd)      //username為產品id       密碼為鑒權信息或者APIkey
//.WithTls()//服務器端沒有啟用加密協議,這里用tls的會提示協議異常
.WithCleanSession(false)
.WithKeepAlivePeriod(TimeSpan.FromSeconds(2000))
.Build();
return options;
}

 

 

連接上以后訂閱主題:

發布主題:

 

 

4.

服務端支持 ClientConnectedClientDisconnected 和 ApplicationMessageReceived 事件,分別用來檢查客戶端連接、客戶端斷開以及接收客戶端發來的消息。

客戶端支持 ConnectedDisconnected 和 ApplicationMessageReceived 事件,用來處理客戶端與服務端連接、客戶端從服務端斷開以及客戶端收到消息的事情。

5.

通過 mqtt接入onenet,其實也就是把onenet 平台當做mqtt broker,連接上稍作改變就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM