插件安装失败?我踩过的坑和排查思路
记录了一些关于插件安装失败的真实排查经历,从版本兼容到网络代理,分享几个容易绕进去的坑和对应的解决思路。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-07-08 01:15:43 python mqtt websocket paho-mqtt 故障排查
最近在搞一个物联网项目,用 Python 写后端,需要让前端通过 WebSocket 连到 MQTT broker。
paho-mqtt 这个库本身支持 WebSocket,但实际配起来碰到几个坑,记录一下。
环境没啥特别的,Python 3.6 以上,直接 pip install paho-mqtt。不过要注意,如果装的是 2.x 版本,回调接口变了,旧代码会报错,后面说。
先看连接参数。
broker 地址直接写域名,比如 broker.emqx.io,WebSocket 端口通常是 8083,别跟 MQTT 默认的 1883 搞混。client_id 最好用随机字符串,否则多个客户端同 id 会被踢下线。keepalive 默认 60 秒,网络不太稳的话可以设短一点,30 秒也行。
连接时 paho 会自动根据 broker 字符串的前缀决定用普通 TCP 还是 WebSocket。
想要走 WebSocket,broker 写成 "ws://broker.emqx.io",TLS 就用 "wss://"。然后 connect 方法指定端口 8083,再挂上 on_connect、on_message 之类的回调就行了。
好,现在说坑。
Unsupported callback API version
如果代码是照着 paho 1.x 写的,拿 2.0 的库一跑直接炸,报错:
ValueError: Unsupported callback API version: version 2.0 added a callback_api_version
这是因为 2.0 改了回调 API 的注册方式,要求显式传一个 callback_api_version 参数。解决办法要么降级到 1.x 版本:
pip install "paho-mqtt<2.0"
要么按照新版文档改代码,在 Client 构造时加上 callback_api_version=2。团队项目我一般直接锁版本,省得互相影响。
Name or service not known
这个一般和 DNS 有关,连接时报错:
Failed to connect to MQTT Broker: [Errno -2] Name or service not known
先 ping 一下 broker 域名,能通的话再试试直接用 IP 连接,比如测试用的 18.138.181.24。如果 IP 能连域名不能,检查 /etc/resolv.conf 或者公司内网的 DNS 设置。有些容器环境默认 DNS 配得不对也会这样。
Connection refused
这个更常见,端口没开或者防火墙拦了。报错:
Failed to connect to MQTT Broker: [Errno 111] Connection refused
在服务器上用 ufw allow 8083 放行端口,如果是云服务器记得配安全组。
另外有些公司网络的 HTTP 代理不支持 WebSocket 协议,需要确认代理类型,不行就直连或者搭个支持 WS 的隧道。
这些错误排查完,连接基本就稳了。生产环境还得做点加固。
重连是必须的。写个简单逻辑:连不上或者断线时,随机等 1 到 5 秒重试,最多试 5 次。成功后重置计数器。只要 broker 不挂,通常都能恢复。
安全方面,启 TLS 加密,调用 client.tls_set(ca_certs="/path/to/ca.crt"),如果 broker 要求客户端证书,再传 certfile 和 keyfile。
认证就用 username_pw_set 设用户名密码,或者 token。
性能上,QoS 别无脑选 2,除非一条消息都不能丢,一般 QoS 1 够用。如果消息量很大,考虑批量发送,但注意控制频率,别把 broker 打爆。
踩完这些坑,MQTT over WebSocket 跑起来还算稳定。后面有时间看看 MQTT 5.0 的特性,共享订阅、消息过期这些,说不定能用来优化消息分发。
记录了一些关于插件安装失败的真实排查经历,从版本兼容到网络代理,分享几个容易绕进去的坑和对应的解决思路。
一次在 CentOS 上 Docker 怎么都起不来的经历,记录从看日志、查配置到解决 SELinux 与网桥冲突的完整过程。
记录一次 docker pull 时报 read tcp 错误的完整排查过程,从网络、DNS、代理到 daemon 配置和抓包。
刚更新完NVIDIA驱动,Vulkan就罢工了?别急!`VK_ERROR_INCOMPATIBLE_DRIVER`是开发者社区的常见噩梦。本文将为你揭示此错误的根源,提供简洁明了的解决方案,无论你是`vkcube`失败还是`vulkaninfo`报错,都能找到对症下药的方法。立即告别黑屏和卡顿,让你的Vulkan应用迅速恢复正常!
SSL证书验证失败通常是配置、时间或网络问题。本文从证书有效性、证书链、系统时间、CA库到客户端代码,全面剖析并解决各类验证失败难题。