大家好,又見面了,我是你們的朋友全棧君。
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.
服務端支援 ClientConnected、ClientDisconnected 和 ApplicationMessageReceived 事件,分别用來檢查用戶端連接配接、用戶端斷開以及接收用戶端發來的消息。
用戶端支援 Connected、Disconnected 和 ApplicationMessageReceived 事件,用來處理用戶端與服務端連接配接、用戶端從服務端斷開以及用戶端收到消息的事情。
5.
通過 mqtt接入onenet,其實也就是把onenet 平台當做mqtt broker,連接配接上稍作改變就可以了。
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/152849.html原文連結:https://javaforall.cn