zoukankan      html  css  js  c++  java
  • 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,连接上稍作改变就可以了。

  • 相关阅读:
    Go-41-回调
    生产者和消费者模型
    等待和通知
    Java 实现多线程的三种方式
    synchronized(修饰方法和代码块)
    volatile 关键字(修饰变量)
    并发三大特性
    Thread 和 Runnable
    《深入理解 Java 虚拟机》学习 -- Java 内存模型
    《深入理解 Java 虚拟机》学习 -- 类加载机制
  • 原文地址:https://www.cnblogs.com/lypstudy/p/10515791.html
Copyright © 2011-2022 走看看