首页 > 编程语言 >C# M2Mqtt组件连接失败后占用大量cpu不释放以及重复用一个client进行重连会出现假连接现象的解决方案

C# M2Mqtt组件连接失败后占用大量cpu不释放以及重复用一个client进行重连会出现假连接现象的解决方案

时间:2023-10-17 17:22:46浏览次数:29  
标签:调用 C# cpu dll M2Mqtt client 报错 连接

M2Mqtt是C#的一个mqtt客户端库,这个库很好用,但是它有严重的Bug

当我们调用Connect建立连接时,如果身份认证失败,它会返回状态码3,即"连接已拒绝,不合格的客户端标识符",但是其内部的异步线程并不会终止,依然会占用大量的cpu资源,即使Disconnect且把client置为null也没用,除非彻底关闭程序

当我们第一次调用Connect连接失败后,如果重复调用同一个client的Connect函数,在若干次后,它竟然神奇的连接成功了,此时的IsConnected=true,发布数据也不会报错,但是这都是假象,当你调用Disconnect时,它就会报错,说是无法调用已经释放的Socket

这些问题github上也有人遇见过了,他们在源码上做了很小的改动就能解决这个问题,但是貌似原作者已经不打算更新代码了,合并请求没有得到通过

https://github.com/eclipse/paho.mqtt.m2mqtt/pull/77/files

我对github不是太熟悉,只能自己摸索着把原项目下到本地,然后按照上面进行代码改动,然后重新发布出了dll

经过测试,改过的dll确实没有再出现上面的问题了

最开始我是直接打开原项目根目录下的sln,结果一堆报错,

在源码的M2Mqtt目录下有很多的项目,因为之前我在nuget上用的就是这个M2Mqtt.Net.dll,所以我就打开了M2Mqtt.Net.csproj,这个可以正常加载项目,然后就可以在里面进行修改了,最后生成dll就能用了

标签:调用,C#,cpu,dll,M2Mqtt,client,报错,连接
From: https://www.cnblogs.com/luludongxu/p/17770184.html

相关文章

  • PEnum_LifeCyclePhase
    PEnum_LifeCyclePhase (生命周期阶段) NameDescriptionACQUISITIONAcquisition CRADLETOSITECradletosite DECONSTRUCTIONDeconstruction DISPOSALDisposal DISPOSALTRANSPORTDisposalTransport ......
  • 使用CGAL计算直线和圆的交点
     #include<vector>#include<iostream>#include<CGAL/Exact_predicates_exact_constructions_kernel.h>#include<CGAL/Ray_2.h>#include<CGAL/Polygon_2.h>#include<CGAL/intersections.h>typedefCGAL::Exact_predicates_e......
  • JavaScript的数字运算不准的问题
    JavaScript的运算问题存在两方面:第一个表示不准问题:打开浏览器按F12,在Console里,输入0.1+0.2=0.30000000000000004输入91.25*0.7=63.87499999999999 解决这个问题,要用第三方库math.js或decimal.js constmath=require('mathjs');console.log(math.add(0.1,0.2));......
  • ctypes学习 + GearDVFS源码分析(/src/perf_lib)
      最近在尝试复现GearDVFS的代码,代码结构很复杂,由于需要获取硬件信息,作者使用ctypes实现与底层的交互,任务紧迫,开始学习吧!1.ctypes介绍  资料的来源已经放在了后文的链接中,由于我的基础实在很薄弱,因此看了很多资料才搞懂ctypes的实现原理,如果有和我一样的菜鸟,在学习之前可以......
  • 2前端开发css
    form表单'''获取前端用户数据并发送给后端服务器'''<fromaction=""></from>#需要再form标签内部编写获取用户数据标签#1属性action控制数据的提交地址方式1:写全路径action="http://www.aa7a.cn/user.php"方式2:写后缀(自动补全IP和PORT)......
  • 解决The following specifications were found to be incompatible with the existing
    解决"Thefollowingspecificationswerefoundtobeincompatiblewiththeexistingpythoninstallation"的问题当你尝试安装或更新Python包时,有时候你可能会遇到以下错误信息:plaintextCopycodeThefollowingspecificationswerefoundtobeincompatiblewiththeexisting......
  • 解决gyp verb ensuring that file exists: C:Python27python.exe gyp ERR! configure
    解决"gypverbensuringthatfileexists:C:\Python27\python.exegypERR!configureerrorgypERR!sta"错误一些开发者在使用Node.js模块时,可能会遇到类似于"gypverbensuringthatfileexists:C:\Python27\python.exegypERR!configureerrorgypERR!sta"......
  • iframe实现与父页面跨域隔离的JavaScript 代码沙箱
    这篇文章主要介绍了使用iframe实现与父页面跨域隔离的JavaScript代码沙箱,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪目录正文1.iframe2.dataURL3.将JavaScript代码变成dataURL4.如果需要获取执行结果的话,基于postMessage定制通信机制正文假......
  • 解决AttributeError: module tensorflow has no attribute placeholder
    解决AttributeError:module'tensorflow'hasnoattribute'placeholder'如果你在使用TensorFlow时遇到了"AttributeError:module'tensorflow'hasnoattribute'placeholder'"的错误,这意味着你正在使用的TensorFlow版本与你的代码不兼容。这个错误通常是因为在Tens......
  • 解决OSError: cannot open resource self.font = core.getfont(font, size, index, en
    解决OSError:cannotopenresourceself.font=core.getfont(font,size,index,encoding,layout_engin在使用Python编程时,我们有时会遇到OSError:cannotopenresourceself.font=core.getfont(font,size,index,encoding,layout_engin这个错误。这个错误通常是由于缺少......