怎么在C#中使用Mqtt实现一个断线重连功能

怎么在C#中使用Mqtt实现一个断线重连功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

创新互联是一家专业提供师宗企业网站建设,专注与网站制作、成都网站设计H5建站、小程序制作等业务。10年已为师宗众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

(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实现一个断线重连功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。

分享题目:怎么在C#中使用Mqtt实现一个断线重连功能
新闻来源:https://www.cdcxhl.com/article16/ppicgg.html

成都网站建设公司_创新互联,为您提供商城网站网站营销企业网站制作网站设计域名注册响应式网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司