广西十一选五玩法|广西十一选五开奖查询
  • C# 接受MQTT服務器推送的消息

    發布:51Code 時間: 2018-09-27 09:49

  • 前言: MQTT是IBM開發的一個即時通訊協議。MQTT是面向M2M和物聯網的連接協議,采用輕量級發布和訂閱消息傳輸機制。 大家可以直接上GitHub下載MQQT服務的源碼,源碼地址:https://github.c...

  • 前言:

     MQTT是IBM開發的一個即時通訊協議。MQTT是面向M2M和物聯網的連接協議,采用輕量級發布和訂閱消息傳輸機制。

     大家可以直接上GitHub下載MQQT服務的源碼,源碼地址:https://github.com/mqtt/mqtt.github.io/wiki/libraries

    主要內容:

    官方文檔翻譯:

    M2Mqtt庫提供了一個主類MqttClient,代表連接到代理的MQTT客戶端。您可以連接到提供其IP地址或主機名的代理,以及可選的與MQTT協議相關的一些參數。

    連接到代理后,您可以使用Publish()方法向主題和Subscribe()方法發布消息以訂閱主題并接收其上發布的消息。

    MqttClient類是基于事件,以便您在郵件發布到您訂閱的主題時收到一個事件。消息發布完成后,您可以收到事件,您已訂閱或取消訂閱主題。

    以客戶端為主題的例子:

    ... 

     

    // create client instance 

    MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS)); 

     

    // register to message received 

    client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; 

     

    string clientId = Guid.NewGuid().ToString(); 

    client.Connect(clientId); 

     

    // subscribe to the topic "/home/temperature" with QoS 2 

    client.Subscribe(new string[] { "/home/temperature" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); 

     

    ... 

     

    static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) 

    // handle message received 

    }

     

    一般C#客戶端都是應用單例模式,下面的是我封裝的類:

     

    public class MqttClientService

        {

     

            private static volatile MqttClientService _instance = null;

     

            private static readonly object LockHelper = new object();

     

            /// <summary>

            /// 創建單例模式

            /// </summary>

            /// <param name="ipAddress"></param>

            /// <returns></returns>

            public static MqttClientService CreateInstance(string ipAddress)

            {

                if (_instance == null)

                {

                    lock (LockHelper)

                    {

                        if (_instance == null)

                            _instance = new MqttClientService(ipAddress);

                    }

                }

                return _instance;

            }

     

            /// <summary>

            /// 實例化訂閱客戶端

            /// </summary>

            public MqttClient SubscribeClient { get; set; }

     

     

            public Action<Object, MqttMsgPublishEventArgs> ClientPublishReceivedAction { get; set; }

     

            public MqttClientService(string ipAddress)

            {

                // create client instance 

                SubscribeClient = new MqttClient(IPAddress.Parse(ipAddress));

     

                // register to message received 

                SubscribeClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;

     

                string clientId = Guid.NewGuid().ToString();

     

                SubscribeClient.Connect(clientId);

     

                // subscribe to the topic "/home/temperature" with QoS 2 

                SubscribeClient.Subscribe(new string[] { "avatar/uploaded" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });

            }

     

            void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)

            {

                // handle message received 

                ClientPublishReceivedAction.Invoke(sender, e);

            }

     

            public void client_MqttMsgPublish(string publishString)

            {

                SubscribeClient.Publish("avatar/signed", Encoding.UTF8.GetBytes(publishString), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);

            }

        }

    用戶只需要把訂閱的路徑寫到Subscribe即可。

    文章來源:https://www.cnblogs.com/dongqinnanren/p/6839319.html
    上文內容不用于商業目的,如涉及知識產權問題,請權利人聯系博為峰小編(021-64471599-8103),我們將立即處理。
  • 上一篇:.NET Core部署中你不了解的框架依賴與獨立部署

    下一篇:體驗 PHP under .NET Core

網站導航
Copyright(C)51Code軟件開發網 2003-2020 , 滬ICP備05003035號-6
广西十一选五玩法 20120319天下足球直播 蓝洞软件下载 北京十一选五 云南十一选五怎么选号 山西11选5 qq麻将技巧智慧宝典 好运彩3 武汉麻将的玩法 即时竞彩比分最快 足球比分球探