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,连接上稍作改变就可以了。