中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C#中使用Mqtt實現一個斷線重連功能

發布時間:2021-04-19 17:35:56 來源:億速云 閱讀:808 作者:Leah 欄目:編程語言

怎么在C#中使用Mqtt實現一個斷線重連功能?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

(1)如果提供的服務端地址是不可解析的,會引發異常無法實例化 MqttClient 對象。

(2)Connect 無法連接時會引發異常,IsConnected 為 false。
(3)服務端斷開會觸發客戶端的 ConnectionClosed 事件,IsConnected 為 false。
(4)重新 Connect 需要重新 Subscribe 訂閱主題。
(5)MqttClient.Subscribe 第一個參數為訂閱主題數組,第二個為相應的 qosLevel,兩個數組長度必須一致,否則會異常。

重連流程控制

怎么在C#中使用Mqtt實現一個斷線重連功能

主要代碼實現

(1)線程主體

// 自動重連主體
private void _TryContinueConnect()
{
  if (IsConnected) return;

  Thread retryThread = new Thread(new ThreadStart(delegate
  {
    while (_MqttClient == null || !_MqttClient.IsConnected)
    {
      if (_ToClose) break;

      if (_MqttClient == null)
      {
        _BuildClient();
        Thread.Sleep(3000);
        continue;
      }

      try
      {
        _TryCount++;
        _Connect(); 
      }
      catch (Exception ce)
      {
        Debug.WriteLine("re connect exception:" + ce.Message);
      }

      // 如果還沒連接不符合結束條件則睡2秒
      if (!_MqttClient.IsConnected)
      {
        Thread.Sleep(2000);
      }
    }
  }));
      
  retryThread.Start();
}

(2)實例化部分

// 實例化客戶端
private void _BuildClient()
{
  try
  {
    _MqttClient = new MqttClient(_MqttServer);
  }
  catch (Exception e)
  {
    Debug.WriteLine("build client error:" + e.Message);
    return;
  }

  // 消息到達事件綁定
  _MqttClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;

  // 連接斷開事件綁定
  _MqttClient.ConnectionClosed += (sender, e) =>
  {
    if (!_ToClose)
    {
      // 嘗試重連
      _TryContinueConnect();
    }
  };
}

(3)嘗試連接部分

// 發起一次連接,連接成功則訂閱相關主題 
private void _Connect()
{
  if (String.IsNullOrEmpty(_MqttUsername))
  {
    var b = _MqttClient.Connect(_MqttClientId);
  }
  else
  {
    var b = _MqttClient.Connect(_MqttClientId, _MqttUsername, _MqttUserpass);
  } 

  if (_MqttClient.IsConnected)
  {
    _MqttClient.Subscribe(new string[] { "topic1", "topic2" },
      new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
  }
}

關于怎么在C#中使用Mqtt實現一個斷線重連功能問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛山市| 双辽市| 潜山县| 蒙山县| 天柱县| 浏阳市| 夏津县| 绍兴县| 昌都县| 綦江县| 峡江县| 芷江| 平舆县| 保定市| 安仁县| 东乌珠穆沁旗| 崇左市| 三原县| 卢湾区| 荔波县| 辽阳市| 博湖县| 外汇| 聂荣县| 商城县| 垦利县| 儋州市| 临夏市| 离岛区| 黄龙县| 正宁县| 宁远县| 黄浦区| 河间市| 龙胜| 理塘县| 麻城市| 徐州市| 高碑店市| 合作市| 奉贤区|