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

  介绍

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

(1)如果提供的服务端地址是不可解析的,会引发异常无法实例化MqttClient对象。

(2)连接无法连接时会引发异常,与为假。
(3)服务端断开会触发客户端的ConnectionClosed事件,与为假。
(4)重新连接需要重新订阅订阅主题。
(5) MqttClient。订阅第一个参数为订阅主题数组,第二个为相应的qosLevel,两个数组长度必须一致,否则会异常。

重连流程控制

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

主要代码实现

(1)线程主体

//,自动重连主体   private  void  _TryContinueConnect ()   {   if 才能;(与),返回;      Thread 才能;retryThread =, new 线程(new  ThreadStart(委托   {才能   ,,,while  (_MqttClient ==, null  | |, ! _MqttClient.IsConnected)   ,,,{   ,,,,,if  (_ToClose),打破;      ,,,,,if  (_MqttClient ==, null)   ,,,,,{   ,,,,,,,_BuildClient ();   ,,,,,,,thread . sleep (3000);   ,,,,,,,继续;   ,,,,,}      ,,,,,试一试   ,,,,,{   ,,,,,,,_TryCount + +;   ,,,,,,,_Connect (),,   ,,,,,}   ,,,,,catch  (Exception  ce)   ,,,,,{   ,,,,,,,Debug.WriteLine (“re  connect 例外:“,+,ce.Message);   ,,,,,}      ,,,,,//,如果还没连接不符合结束条件则睡2秒   ,,,,,if  (_MqttClient.IsConnected !)   ,,,,,{   ,,,,,,,thread . sleep (2000);   ,,,,,}   ,,,}   ,,}));   ,,,,,   retryThread.Start才能();   }

(2)实例化部分

//,实例化客户端   private  void  _BuildClient ()   {   ,试一试   {才能   ,,,_MqttClient =, new  MqttClient (_MqttServer);   ,,}   catch 才能;(Exception  e)   {才能   ,,,Debug.WriteLine (“build  client 错误:“,+,e.Message);   ,,,返回;   ,,}//,才能消息到达事件绑定   _MqttClient.MqttMsgPublishReceived 才能+=,client_MqttMsgPublishReceived;//才能,连接断开事件绑定   _MqttClient.ConnectionClosed 才能+=,(发送方,e),=比;   {才能   ,,,if  (_ToClose !)   ,,,{   ,,,,,//,尝试重连   ,,,,,_TryContinueConnect ();   ,,,}   ,,};   }

(3)尝试连接部分

//,发起一次连接,连接成功则订阅相关主题,   private  void  _Connect ()   {   if 才能;(String.IsNullOrEmpty (_MqttUsername))   {才能   ,,,var  b =, _MqttClient.Connect (_MqttClientId);   ,,}   其他的才能   {才能   ,,,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实现一个断线重连功能